|
请使用 Spring Cloud Kubernetes 5.0.1(最新稳定版本)! |
Kubernetes 生态系统认知
本指南中之前描述的所有功能在任何情况下均能正常工作,无论您的应用程序是否在 Kubernetes 内运行。这对于开发和故障排查非常有帮助。从开发角度而言,这使您可以启动 Spring Boot 应用程序,并调试该项目中的一个模块。您无需将其部署到 Kubernetes 中,因为项目的代码依赖于 Fabric8 Kubernetes Java 客户端,它是一种流畅的 DSL(领域特定语言),能够通过 http 协议与 Kubernetes 服务器的 REST API 进行通信。
Kubernetes感知基于Spring Boot API,特别是基于ConditionalOnCloudPlatform。该属性将自动检测您的应用程序当前是否部署在Kubernetes环境中。您也可以通过spring.main.cloud-platform来覆盖此设置。
例如,如果您需要测试某些功能,但又不想部署到集群中,只需设置:spring.main.cloud-platform=KUBERNETES。这将使 spring-cloud-kubernetes 表现得如同已部署在真实集群中一样。
如果您在类路径中包含 spring-cloud-starter-bootstrap 或正在设置 spring.cloud.bootstrap.enabled=true,则您必须在 bootstrap.{properties|yml}(或特定于配置文件的版本)中设置 spring.main.cloud-platform。此外,请注意,以下属性:spring.cloud.kubernetes.config.enabled 和 spring.cloud.kubernetes.secrets.enabled 仅在您将它们设置在 bootstrap.{properties|yml} 中且类路径中包含 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。
-
另一个重大变更在于,加载配置映射(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 配置自动装配
当应用程序作为 Pod 在 Kubernetes 中运行时,会自动激活一个名为 kubernetes 的 Spring 配置文件。这使您能够自定义配置,以定义在 Spring Boot 应用程序部署于 Kubernetes 平台时所应用的 Bean(例如,不同的开发与生产配置)。
Istio Awareness
当你将 spring-cloud-kubernetes-fabric8-istio 模块包含在应用程序类路径中时,若应用程序正在运行于已安装了 Istio 的 Kubernetes 集群内,便会为应用程序添加一个新配置文件。此后,你便可在你的 Bean 和 @Configuration 类中使用 Spring @Profile("istio") 注解。
Istio 感知模块使用 me.snowdrop:istio-client 与 Istio API 进行交互,使我们能够发现流量规则、熔断器等信息,从而让我们的 Spring Boot 应用程序能够轻松地利用这些数据,根据环境动态配置自身。