Kubernetes PropertySource 实现
配置 Spring Boot 应用程序最常见的方法是创建一个 application.properties 或 application.yaml 文件,或者一个 application-profile.properties 或 application-profile.yaml 文件,其中包含为您的应用程序或 Spring Boot 启动器提供自定义值的键值对。您可以通过指定系统属性或环境变量来覆盖这些属性。
要启用此功能,您需要将 spring.config.import 应用程序配置属性设置为 kubernetes:(在使用 yaml 时用引号转义,例如 "kubernetes:")。目前,您无法使用 spring.config.import 指定要加载的 ConfigMap 或 Secret,默认情况下,Spring Cloud Kubernetes 将根据 spring.application.name 属性加载 ConfigMap 和/或 Secret。如果未设置 spring.application.name,它将加载名为 application 的 ConfigMap 和/或 Secret。
如果您希望在引导阶段加载 Kubernetes PropertySource,就像在 3.0.x 版本发布之前那样工作,您可以将 spring-cloud-starter-bootstrap 添加到应用程序的类路径中,或者将 spring.cloud.bootstrap.enabled=true 设置为环境变量。
不支持在 Bootstrap 期间加载属性(使用 spring-cloud-starter-bootstrap 或 spring.cloud.bootstrap.enabled=true 并使用 spring.config.import 加载属性)。您必须使用其中一种方法。
章节总结
使用 ConfigMap PropertySource
Kubernetes 提供了一种名为 ConfigMap 的资源,用于以键值对或嵌入式 application.properties 或 application.yaml 文件的形式将参数传递给应用程序。Spring Cloud Kubernetes Config 项目使得在应用程序启动期间可以访问 Kubernetes ConfigMap 实例,并在检测到被观察的 ConfigMap 实例发生更改时触发 bean 或 Spring 上下文的热重载。
Secrets PropertySource
Kubernetes 拥有用于存储敏感数据(如密码、OAuth 令牌等)的 Secrets 概念。本项目提供了与 Secrets 的集成,使 Spring Boot 应用程序能够访问这些密钥。您可以通过设置 spring.cloud.kubernetes.secrets.enabled 属性来显式启用或禁用此功能。
命名空间解析
查找应用程序命名空间是基于最佳努力原则进行的。我们会按顺序执行一些步骤来查找它。最简单且最常见的方法是在适当的配置中指定它,例如:
ConfigMaps 和 Secrets 的顺序
如果出于某种原因,您同时启用了 ConfigMap 和 Secret,并且它们之间存在相同的属性,那么 ConfigMap 中的值将具有更高的优先级。也就是说:它会覆盖 Secret 中找到的任何值。
PropertySource 重载
某些应用程序可能需要检测外部属性源的变化,并更新其内部状态以反映新的配置。Spring Cloud Kubernetes 的重载功能能够在相关的 ConfigMap 或 Secret 发生变化时触发应用程序重载。
重新加载命名空间和标签过滤
默认情况下,将使用通过命名空间解析步骤选择的命名空间来监听配置映射和密钥的更改。也就是说,如果您没有告诉 reload 要监视哪些命名空间和配置映射/密钥,它将监视使用上述算法计算出的命名空间中的所有配置映射/密钥。