3. Kubernetes 的 DiscoveryClient
该项目提供了 Discovery Client for Kubernetes 的实现。
此客户端允许您按名称查询 Kubernetes 终端节点(请参阅服务)。
服务通常由 Kubernetes API 服务器作为表示和寻址的端点集合公开,并且客户端可以
从作为 Pod 运行的 Spring Boot 应用程序访问。http
https
这是您可以通过在项目中添加以下依赖项来免费获得的东西:
Fabric8 Kubernetes 客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-fabric8</artifactId>
</dependency>
Kubernetes Java 客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-client</artifactId>
</dependency>
要启用加载 ,请添加到相应的配置或应用程序类,如下例所示:DiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
然后,您只需通过自动装配客户端即可将其注入代码中,如下例所示:
@Autowired
private DiscoveryClient discoveryClient;
您可以通过在 中设置以下属性来选择从所有命名空间中启用 :DiscoveryClient
application.properties
spring.cloud.kubernetes.discovery.all-namespaces=true
要发现未被 kubernetes api 服务器标记为 “ready” 的服务端点地址,您可以在 (default: false) 中设置以下属性:application.properties
spring.cloud.kubernetes.discovery.include-not-ready-addresses=true
这在发现用于监控目的的服务时可能很有用,并且将启用检查未就绪服务实例的终端节点。/health |
如果您的服务公开了多个端口,则需要指定应使用哪个端口。
将使用以下逻辑选择端口。DiscoveryClient
DiscoveryClient
-
如果服务具有标签,它将使用标签值中指定的名称的端口。
primary-port-name
-
如果不存在标签,则将使用 中指定的端口名称。
spring.cloud.kubernetes.discovery.primary-port-name
-
如果以上均未指定,它将使用名为 .
https
-
如果以上条件都不满足,它将使用名为 .
http
-
作为最后的手段,它将选择端口列表中的第一个端口。
最后一个选项可能会导致非确定性行为。 请确保相应地配置您的服务和/或应用程序。 |
默认情况下,所有端口及其名称都将添加到 .ServiceInstance
如果出于任何原因需要禁用 ,则可以在 中设置以下属性:DiscoveryClient
application.properties
spring.cloud.kubernetes.discovery.enabled=false
某些 Spring Cloud 组件使用 for 来获取有关本地服务实例的信息。为
要正常工作,您需要将 Kubernetes 服务名称与属性保持一致。DiscoveryClient
spring.application.name
spring.application.name 只要在 Kubernetes 中为应用程序注册的名称,则没有影响 |
Spring Cloud Kubernetes 还可以监视 Kubernetes 服务目录的更改,并相应地更新实现。为了启用此功能,您需要在应用程序中添加 configuration 类。DiscoveryClient
@EnableScheduling