Kubernetes 生态系统感知
本指南前面描述的所有功能都能正常工作,无论您的应用程序是否在 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 ,那么您必须将 spring.main.cloud-platform 设置在 bootstrap.{properties|yml} 中(或特定 profile 的文件中)。另请注意,当您的 classpath 中有 spring-cloud-starter-bootstrap 或正在设置 spring.cloud.bootstrap.enabled=true 时,属性 spring.cloud.kubernetes.config.enabled 和 spring.cloud.kubernetes.secrets.enabled 只有在 bootstrap.{properties|yml} 中设置时才会生效。 |
3.0.x 版本中的重大变更
在 3.0.x
之前的 Spring Cloud Kubernetes 版本中,Kubernetes 感知是使用 spring.cloud.kubernetes.enabled
属性实现的。此属性已被移除且不再支持。取而代之的是,我们使用 Spring Boot API:ConditionalOnCloudPlatform。如果需要显式启用或禁用此感知,请使用 spring.main.cloud-platform=NONE/KUBERNETES
。
-
另一个重大变更是加载 configmaps/secrets 所需的额外
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"]
Kubernetes Profile 自动配置
当应用程序作为 pod 在 Kubernetes 内部运行时,名为 kubernetes
的 Spring profile 会自动激活。这允许您自定义配置,以定义在 Spring Boot 应用程序部署到 Kubernetes 平台时应用的 bean(例如,不同的开发和生产配置)。
Istio 感知
当您在应用程序 classpath 中包含 spring-cloud-kubernetes-fabric8-istio
模块时,如果应用程序运行在安装了 Istio 的 Kubernetes 集群中,则会向应用程序添加一个新的 profile。然后,您可以在 Bean 和 @Configuration
类中使用 spring @Profile("istio")
注解。
Istio 感知模块使用 me.snowdrop:istio-client
与 Istio API 交互,使我们能够发现流量规则、熔断器等,从而使我们的 Spring Boot 应用程序易于消费这些数据,并根据环境动态配置自身。