11.3. 使用 ConfigMap PropertySource

Kubernetes 具有将配置传递给应用程序的 ConfigMap 的概念。Spring cloud Kubernetes 插件提供与 ConfigMap 集成,使配置映射可以被 Spring Boot 访问。

启用时 ConfigMap PropertySource 将查找由应用程序命名的 ConfigMap (请参阅 spring.application.name)。如果找到该映射,它将读取其数据并执行以下操作:

11.3.1. 应用单个属性

假设我们有一个名为 demo 的 Spring Boot 应用程序,它使用属性读取其线程池配置。

  • pool.size.core
  • pool.size.max

这可以以 YAML 格式外部化到配置映射:

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  pool.size.core: 1
  pool.size.max: 16

11.3.2. 应用 application.yaml ConfigMap 属性

对于大多数情况,单个属性可以正常工作,但有时我们找到 YAML 更为方便。在这种情况下,我们使用名为 application.yaml 的单个属性,并将 YAML 嵌入到其中:

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yaml: |-
    pool:
      size:
        core: 1
        max:16

11.3.3. 应用 application.properties ConfigMap 属性

您还可以在 Spring Boot application.properties 文件的样式中定义 ConfigMap 属性。在这种情况下,我们使用名为 application.properties 的单个属性,并列出其中的属性设置:

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.properties: |-
    pool.size.core: 1
    pool.size.max: 16

11.3.4. 部署 ConfigMap

要部署 ConfigMap 并使它可以被 Spring Boot 应用程序访问,请执行以下步骤。

流程

  1. 在 Spring Boot 应用程序中,使用外部配置机制 来访问 ConfigMap 属性源。例如,通过为带有 @Configuration 注释的 Java bean 标注,bean 的属性值可能会由 ConfigMap 注入。
  2. 在项目的 bootstrap.properties 文件(或 bootstrap.yaml 文件)中,设置 spring.application.name 属性以匹配 ConfigMap 的名称。
  3. 对与应用程序关联的服务帐户启用 查看 权限(默认情况下,这是名为 default的服务帐户)。例如,将 view 权限添加到 default 服务帐户:

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)