跳到主要内容

Kubernetes 生态系统认知

DeepSeek V3 中英对照 Kubernetes Ecosystem Awareness

本指南中描述的所有功能,无论您的应用程序是否在 Kubernetes 内部运行,都能同样良好地工作。这对于开发和故障排除非常有帮助。从开发的角度来看,这使您可以启动 Spring Boot 应用程序并调试作为该项目一部分的某个模块。您无需将其部署在 Kubernetes 中,因为项目的代码依赖于 Fabric8 Kubernetes Java 客户端,这是一个流畅的 DSL,可以通过 http 协议与 Kubernetes Server 的 REST API 进行通信。

Kubernetes 感知基于 Spring Boot API,具体来说是 ConditionalOnCloudPlatform。该属性会自动检测您的应用程序当前是否部署在 Kubernetes 中。您可以通过 spring.main.cloud-platform 覆盖此设置。

例如,如果您需要测试某些功能,但不想部署到集群中,只需设置:spring.main.cloud-platform=KUBERNETES。这将使 spring-cloud-kubernetes 表现得好像它部署在一个真实的集群中一样。

备注

如果你的 classpath 中有 spring-cloud-starter-bootstrap 或者设置了 spring.cloud.bootstrap.enabled=true,那么你需要在 bootstrap.{properties|yml}(或特定环境的配置文件)中设置 spring.main.cloud-platform。另外请注意,这些属性:spring.cloud.kubernetes.config.enabledspring.cloud.kubernetes.secrets.enabled 只有在 bootstrap.{properties|yml} 中设置时才会生效,前提是你的 classpath 中有 spring-cloud-starter-bootstrap 或者设置了 spring.cloud.bootstrap.enabled=true

3.0.x 版本中的重大变更

在 Spring Cloud Kubernetes 3.0.x 之前的版本中,Kubernetes 感知功能是通过 spring.cloud.kubernetes.enabled 属性实现的。该属性已被移除且不再支持。取而代之的是使用 Spring Boot 的 API:ConditionalOnCloudPlatform。如果需要显式启用或禁用此感知功能,请使用 spring.main.cloud-platform=NONE/KUBERNETES

  • 另一个重大变化是加载 ConfigMap/Secret 时需要使用额外的 list 动词。例如:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-role
rules:
- apiGroups: ["", "extensions", "apps", "discovery.k8s.io"]
resources: ["configmaps", "pods", "services", "endpoints", "secrets", "endpointslices"]
verbs: ["get", "list", "watch"]
none

Kubernetes 配置文件自动配置

当应用程序作为 Kubernetes 中的 Pod 运行时,一个名为 kubernetes 的 Spring 配置文件会自动激活。这使您可以自定义配置,以定义在 Spring Boot 应用程序部署到 Kubernetes 平台时应用的 bean(例如,不同的开发和生产配置)。

Istio 认知

当你在应用程序的类路径中包含 spring-cloud-kubernetes-fabric8-istio 模块时,如果应用程序运行在安装了 Istio 的 Kubernetes 集群中,一个新的配置文件将被添加到应用程序中。然后,你可以在你的 Beans 和 @Configuration 类中使用 Spring 的 @Profile("istio") 注解。

Istio 感知模块使用 me.snowdrop:istio-client 与 Istio API 进行交互,使我们能够发现流量规则、断路器等信息,从而使我们的 Spring Boot 应用程序能够轻松地使用这些数据,根据环境动态配置自身。