该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Cloud Kubernetes 5.0.0spring-doc.cadn.net.cn

Kubernetes 负载均衡器

该项目包含基于Kubernetes Endpoints或Kubernetes Service的Spring Cloud Load Balancer,用于负载均衡。 要将其纳入项目,添加以下依赖项。 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>

负载均衡器有两种“模式”工作:服务,记为性质(默认为)spring-doc.cadn.net.cn

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

模式,我们将使用发现客户端查找所有与你负载均衡器名称匹配的服务。例如,如果你有一个这样的配置:spring-doc.cadn.net.cn

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

并向服务-A利用该方法Web客户端,我们将使用服务-A呼唤DiscoveryClient::getInstances以这个数值。因为这是使用发现客户端所有针对其的特定配置都适用,相关内容在文档相关部分有说明。spring-doc.cadn.net.cn

另一方面,如果你使用,则服务模式有些不同,但与发现客户端设置非常相似。例如,回答在哪个命名空间中寻找带有名称的服务的问题服务-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

一旦我们知道了端口,就知道怎么打电话给那个服务。该网址的表单如下:spring-doc.cadn.net.cn

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

<SERVICE_NAMESPACE>是服务所在的命名空间,是该属性的值(默认情况下等于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