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 只有在您类路径上有 spring-cloud-starter-bootstrap 或设置了 spring.cloud.bootstrap.enabled=true 时,在 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 配置文件自动配置
当应用程序作为 Pod 在 Kubernetes 内部运行时,名为 kubernetes
的 Spring 配置文件会自动激活。这允许您自定义配置,以定义在 Spring Boot 应用程序部署到 Kubernetes 平台时应用的 Bean(例如,不同的开发和生产配置)。
Istio 感知
当您在应用程序类路径中包含 spring-cloud-kubernetes-fabric8-istio
模块时,如果应用程序在安装了 Istio 的 Kubernetes 集群中运行,则会向应用程序添加一个新的配置文件。然后,您可以在 Bean 和 @Configuration
类中使用 spring @Profile("istio")
注解。
Istio 感知模块使用 me.snowdrop:istio-client
与 Istio API 交互,使我们能够发现流量规则、断路器等,使我们的 Spring Boot 应用程序能够轻松使用此数据根据环境动态配置自身。