3. Kubernetes 的 DiscoveryClient

该项目提供了 Discovery Client for Kubernetes 的实现。 此客户端允许您按名称查询 Kubernetes 终端节点(请参阅服务)。 服务通常由 Kubernetes API 服务器作为表示和寻址的端点集合公开,并且客户端可以 从作为 Pod 运行的 Spring Boot 应用程序访问。httphttpsspring-doc.cn

这是您可以通过在项目中添加以下依赖项来免费获得的东西:spring-doc.cn

Fabric8 Kubernetes 客户端spring-doc.cn

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

Kubernetes Java 客户端spring-doc.cn

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

要启用加载 ,请添加到相应的配置或应用程序类,如下例所示:DiscoveryClient@EnableDiscoveryClientspring-doc.cn

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

然后,您只需通过自动装配客户端即可将其注入代码中,如下例所示:spring-doc.cn

@Autowired
private DiscoveryClient discoveryClient;

您可以通过在 中设置以下属性来选择从所有命名空间中启用 :DiscoveryClientapplication.propertiesspring-doc.cn

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

要发现未被 kubernetes api 服务器标记为 “ready” 的服务端点地址,您可以在 (default: false) 中设置以下属性:application.propertiesspring-doc.cn

spring.cloud.kubernetes.discovery.include-not-ready-addresses=true
这在发现用于监控目的的服务时可能很有用,并且将启用检查未就绪服务实例的终端节点。/health

如果您的服务公开了多个端口,则需要指定应使用哪个端口。 将使用以下逻辑选择端口。DiscoveryClientDiscoveryClientspring-doc.cn

  1. 如果服务具有标签,它将使用标签值中指定的名称的端口。primary-port-namespring-doc.cn

  2. 如果不存在标签,则将使用 中指定的端口名称。spring.cloud.kubernetes.discovery.primary-port-namespring-doc.cn

  3. 如果以上均未指定,它将使用名为 .httpsspring-doc.cn

  4. 如果以上条件都不满足,它将使用名为 .httpspring-doc.cn

  5. 作为最后的手段,它将选择端口列表中的第一个端口。spring-doc.cn

最后一个选项可能会导致非确定性行为。 请确保相应地配置您的服务和/或应用程序。

默认情况下,所有端口及其名称都将添加到 .ServiceInstancespring-doc.cn

如果出于任何原因需要禁用 ,则可以在 中设置以下属性:DiscoveryClientapplication.propertiesspring-doc.cn

spring.cloud.kubernetes.discovery.enabled=false

某些 Spring Cloud 组件使用 for 来获取有关本地服务实例的信息。为 要正常工作,您需要将 Kubernetes 服务名称与属性保持一致。DiscoveryClientspring.application.namespring-doc.cn

spring.application.name只要在 Kubernetes 中为应用程序注册的名称,则没有影响

Spring Cloud Kubernetes 还可以监视 Kubernetes 服务目录的更改,并相应地更新实现。为了启用此功能,您需要在应用程序中添加 configuration 类。DiscoveryClient@EnableSchedulingspring-doc.cn