此版本仍在开发中,尚未被视为稳定版本。如需最新的稳定版本,请使用 Spring Cloud Kubernetes 3.1.4! |
适用于 Kubernetes 的 LoadBalancer
该项目包括 Spring Cloud Load Balancer,用于基于 Kubernetes 端点或 Kubernetes Service 的负载均衡。 要将其包含在您的项目中,请添加以下依赖项。 Fabric8 实现
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-fabric8-loadbalancer</artifactId>
</dependency>
Kubernetes Java 客户端实现
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-client-loadbalancer</artifactId>
</dependency>
负载均衡器有两种“模式”工作:和 ,由属性表示(默认为POD
SERVICE
POD
)
spring.cloud.kubernetes.loadbalancer.mode=SERVICE
或
spring.cloud.kubernetes.loadbalancer.mode=POD
在 mode 中,我们将使用 来查找与您的负载均衡器名称匹配的所有服务。例如,如果你有这样的配置:POD
DiscoveryClient
@Bean
@LoadBalanced
WebClient.Builder client() {
return WebClient.builder();
}
并发出请求 to using that ,我们将使用该值进行 to 调用。由于这是使用 ,因此所有特定于它的配置都适用,这在文档的相关部分中进行了解释。service-a
WebClient
service-a
DiscoveryClient::getInstances
DiscoveryClient
另一方面,如果您使用模式,情况会有所不同,但与 Discovery Client 设置非常相似。例如,要回答在哪个命名空间中查找具有 name 的服务的问题,我们将使用以下设置之一:SERVICE
service-a
spring.cloud.kubernetes.discovery.all-namespaces
spring.cloud.kubernetes.discovery.namespaces
搜索所有命名空间,或所谓的 “选择性命名空间”。如果未指定以上任何内容,则 Namespace Resolution (命名空间解析) 将启动。
找到所有服务后,我们需要知道通过哪个端口呼叫它们。如果相关服务定义了单个端口,那么无论其名称如何,我们都将使用该端口。如果未定义端口,则不会考虑将此服务用于负载均衡,并且将跳过此服务。
如果定义了多个端口,我们将尝试将其名称与属性的值匹配(默认情况下):http
spring.cloud.kubernetes.loadbalancer.portName
如果找到此类匹配项,则将使用该端口号。否则,将使用列表中的 “first” 端口。最后一个选项是不确定的,必须小心。
一旦我们知道了端口,我们就知道如何调用该服务。URL 将采用以下格式:
service-a.<SERVICE_NAMESPACE>.svc.<DOMAIN>:<FOUND_PORT>
<SERVICE_NAMESPACE>
是服务所在的命名空间,是属性的值(默认情况下它等于):DOMAIN
cluster.local
spring.cloud.kubernetes.loadbalancer.clusterDomain
,并且是我们在上面过程中描述的我们选择的服务的端口。<FOUND_PORT>
如果需要通过 HTTPS 访问服务,则需要显式配置该服务。其规则与发现实现的规则完全相同,可以在文档的相关部分中找到 discovery-client.