此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Cloud Kubernetes 3.3.0spring-doc.cadn.net.cn

适用于 Kubernetes 的 LoadBalancer

该项目包括 Spring Cloud Load Balancer,用于基于 Kubernetes Endpoints 或 Kubernetes Service 进行负载均衡。 要将其包含在您的项目中,请添加以下依赖项。 Fabric8 实现spring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes-fabric8-loadbalancer</artifactId>
</dependency>

Kubernetes Java 客户端实现spring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes-client-loadbalancer</artifactId>
</dependency>

负载均衡器有两种“模式”:PODSERVICE,由属性表示(默认为POD)spring-doc.cadn.net.cn

spring.cloud.kubernetes.loadbalancer.mode=SERVICE
spring.cloud.kubernetes.loadbalancer.mode=POD

POD模式,我们将使用DiscoveryClient以查找与负载均衡器名称匹配的所有服务。例如,如果您有这样的配置:spring-doc.cadn.net.cn

@Bean
@LoadBalanced
WebClient.Builder client() {
	return WebClient.builder();
}

并向service-a使用那个WebClient,我们将使用service-a调用DiscoveryClient::getInstances具有此值。由于这是使用DiscoveryClient,所有特定于它的配置都适用,这在文档的相关部分中进行了解释。spring-doc.cadn.net.cn

另一方面,如果您使用SERVICE模式,情况略有不同,但与发现客户端设置非常相似。例如,要回答要在哪个命名空间中查找名称为service-a,我们将使用其中一种设置:spring-doc.cadn.net.cn

spring.cloud.kubernetes.discovery.all-namespaces
spring.cloud.kubernetes.discovery.namespaces

在所有命名空间中搜索,或所谓的“选择性命名空间”。如果未指定上述任何一项,则命名空间解析将启动。spring-doc.cadn.net.cn

找到所有服务后,我们需要知道通过哪个端口调用它们。如果相关服务定义了单个端口,则无论其名称如何,我们都会使用该端口。如果未定义端口,则不会考虑此服务进行负载均衡,并且将被跳过。spring-doc.cadn.net.cn

如果定义了多个端口,我们将尝试将其名称与属性的值(http默认情况下):spring-doc.cadn.net.cn

spring.cloud.kubernetes.loadbalancer.portName

如果找到此类匹配项,将使用该端口号。否则,将使用列表中的“第一个”端口。最后一个选项是不确定的,必须小心。spring-doc.cadn.net.cn

一旦我们知道了端口,我们就知道如何调用该服务。URL 的形式为:spring-doc.cadn.net.cn

service-a.<SERVICE_NAMESPACE>.svc.<DOMAIN>:<FOUND_PORT>

<SERVICE_NAMESPACE>是服务所在的命名空间,DOMAIN是属性的值(默认情况下,它等于cluster.local):spring-doc.cadn.net.cn

spring.cloud.kubernetes.loadbalancer.clusterDomain

<FOUND_PORT>是我们在上述过程中描述的服务的端口。spring-doc.cadn.net.cn

如果需要通过 HTTPS 访问服务,则需要显式配置。该规则与发现实现的规则完全相同,可以在有关发现客户端的文档的相关部分中找到。spring-doc.cadn.net.cn