138. Kubernetes 中的功能区发现

调用微服务的 Spring CloudClient 端应用程序应该对依靠 Client 端负载平衡功能感兴趣,以便自动发现它可以在哪个端点到达给定服务。此机制已在spring-cloud-kubernetes-ribbon项目中实现,其中 KubernetesClient 端将填充包含有关此类端点信息的Ribbon ServerList

该实现是以下启动器的一部分,可以通过将其依赖项添加到 pom 文件中来使用该实现:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
    <version>${latest.version}</version>
</dependency>

当填充端点列表时,KubernetesClient 端将搜索与使用 Ribbon RibbonComments 定义的服务名称匹配的,位于当前名称空间/项目中的已注册端点:

@RibbonClient(name = "name-service")

您可以通过使用以下格式在application.properties中(通过应用程序专用的ConfigMap)提供属性来配置 Ribbon 的行为:<name of your service>.ribbon.<Ribbon configuration key>其中:

  • <name of your service>对应于您通过功能区访问的服务名称,该名称是使用@RibbonClientComments 配置的(例如,上例中的name-service)

  • <Ribbon configuration key>功能区的 CommonClientConfigKey 类定义的功能区配置密钥之一

此外,spring-cloud-kubernetes-ribbon项目还定义了两个附加配置键,以进一步控制 Ribbon 与 Kubernetes 的交互方式。特别是,如果端点定义了多个端口,则默认行为是使用找到的第一个端口。若要更具体地选择在多端口服务中使用哪个端口,请使用PortName键。如果您想指定应在哪个 Kubernetes 命名空间中查找目标服务,请使用KubernetesNamespace键,在这两种情况下都请记住为这些键添加服务名和ribbon前缀,如上所述。

使用此模块进行功能区发现的示例有:

注意 :可以通过在应用程序属性文件spring.cloud.kubernetes.ribbon.enabled=false中设置此键来禁用功能区发现 Client 端。