Kubernetes 属性源实现
配置 Spring Boot 应用程序的最常见方法是创建一个 application.properties
或 application.yaml
文件,或者创建一个 application-profile.properties
或 application-profile.yaml
文件。这些文件包含键值对,为你的应用程序或 Spring Boot 启动器提供自定义值。你可以通过指定系统属性或环境变量来覆盖这些属性。
要启用此功能,您需要将 spring.config.import
应用程序配置属性设置为 kubernetes:
(在使用 YAML 时需要用引号转义,例如 "kubernetes:"
)。目前,您不能指定要加载的 ConfigMap 或 Secret 使用 spring.config.import
,默认情况下,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 提供了 Secrets 的概念,用于存储敏感数据,如密码、OAuth 令牌等。该项目提供了与 Secrets 的集成,使得 Spring Boot 应用程序可以访问这些 Secrets。你可以通过设置 spring.cloud.kubernetes.secrets.enabled 属性来显式启用或禁用此功能。
📄️ 命名空间解析
查找应用程序命名空间是基于最佳努力原则进行的。我们会按照一些步骤来迭代查找它。最简单和最常见的方法是在适当的配置中指定它,例如:
📄️ ConfigMaps 和 Secrets 的顺序
如果出于某种原因,您同时启用了 ConfigMap 和 Secret,并且它们之间存在一个共同的属性,那么 ConfigMap 中的值将具有更高的优先级。也就是说:它将覆盖 Secret 中找到的任何值。
📄️ PropertySource Reload
一些应用程序可能需要检测外部属性源的变化并更新其内部状态以反映新的配置。Spring Cloud Kubernetes 的重载功能能够在相关的 ConfigMap 或 Secret 发生变化时触发应用程序的重载。
📄️ 重新加载命名空间和标签过滤
默认情况下,将使用通过命名空间解析步骤选择的命名空间来监听 configmaps 和 secrets 的变化。也就是说:如果你没有告诉 reload 要监视哪些命名空间和 configmaps/secrets,它将监视通过上述算法计算出的命名空间中的所有 configmaps/secrets。