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,那么 spring.main.cloud-platform 应该在 bootstrap.{properties|yml}(或特定配置文件)中设置。另请注意,当您的类路径中包含 spring-cloud-starter-bootstrap 或设置了 spring.cloud.bootstrap.enabled=true 时,spring.cloud.kubernetes.config.enabledspring.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 配置文件自动配置

当应用程序作为 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 应用程序能够轻松地使用这些数据来根据环境动态配置自身。

© . This site is unofficial and not affiliated with VMware.