3. 适用于 Kubernetes 的 DiscoveryClient

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

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

基于 HTTPDiscoveryClientspring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes-discoveryclient</artifactId>
</dependency>
spring-cloud-starter-kubernetes-discoveryclient旨在与 Spring Cloud Kubernetes DiscoveryServer 一起使用。

Fabric8 Kubernetes 客户端spring-doc.cadn.net.cn

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

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

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

要启用加载DiscoveryClient@EnableDiscoveryClient到相应的配置或应用程序类,如以下示例所示:spring-doc.cadn.net.cn

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

然后,只需对客户端进行自动连接,即可将客户端注入到代码中,如以下示例所示:spring-doc.cadn.net.cn

@Autowired
private DiscoveryClient discoveryClient;

您可以选择启用DiscoveryClient通过在application.properties:spring-doc.cadn.net.cn

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

要发现未被 kubernetes api 服务器标记为“就绪”的服务端点地址,您可以在application.properties(默认值:false):spring-doc.cadn.net.cn

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

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

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

  2. 如果不存在标签,则在spring.cloud.kubernetes.discovery.primary-port-name将被使用。spring-doc.cadn.net.cn

  3. 如果未指定上述任何一项,它将使用名为https.spring-doc.cadn.net.cn

  4. 如果上述条件都不满足,它将使用名为http.spring-doc.cadn.net.cn

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

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

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

如果出于任何原因需要禁用DiscoveryClient,您可以在application.properties:spring-doc.cadn.net.cn

spring.cloud.kubernetes.discovery.enabled=false

一些 Spring Cloud 组件使用DiscoveryClient以获取有关本地服务实例的信息。为 要使其正常工作,您需要将 Kubernetes 服务名称与spring.application.name财产。spring-doc.cadn.net.cn

spring.application.name对于在 Kubernetes 中为应用程序注册的名称没有影响

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