11.4. 使用 Secret PropertySource

Kubernetes 具有用于存储敏感数据的 机密 的概念,如密码、OAuth 令牌等。Spring cloud Kubernetes 插件提供与 Secret 集成,以便 Spring Boot 可以访问 secret。

启用时的 Secrets 属性源将从以下源查找 Secret :如果找到了 secret,其数据会提供给应用程序。

  1. 从 secret 挂载递归读取
  2. 应用程序命名(请参阅 spring.application.name
  3. 匹配一些标签

请注意,默认情况下不会启用 API 消耗的 secret(点 2 和 3)。

11.4.1. 设置 secret 示例

假设我们有一个名为 demo 的 Spring Boot 应用,它使用属性读取其 ActiveMQ 和 PostreSQL 配置。

amq.username
amq.password
pg.username
pg.password

这些 secret 可以作为 YAML 格式的 secret 外部化:

ActiveMQ Secrets
apiVersion: v1
kind: Secret
metadata:
  name: activemq-secrets
  labels:
    broker: activemq
type: Opaque
data:
  amq.username: bXl1c2VyCg==
  amq.password: MWYyZDFlMmU2N2Rm
PostreSQL 机密
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secrets
  labels:
    db: postgres
type: Opaque
data:
  pg.username: dXNlcgo=
  pg.password: cGdhZG1pbgo=

11.4.2. 使用 secret

您可以选择以多种方式使用 Secret:

  • 通过列出映射 secret 的目录:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/activemq,etc/secrets/postgres

    如果您将所有 secret 映射到一个通用根用户,您可以按照如下所示设置它们:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  • 通过设置命名的 secret:

    -Dspring.cloud.kubernetes.secrets.name=postgres-secrets
  • 通过定义标签列表:

    -Dspring.cloud.kubernetes.secrets.labels.broker=activemq
    -Dspring.cloud.kubernetes.secrets.labels.db=postgres

11.4.3. Secrets PropertySource 的配置属性

您可以使用以下属性配置 Secrets 属性源:

spring.cloud.kubernetes.secrets.enabled
启用 Secrets 属性源。type 为 布尔值,默认为 true
spring.cloud.kubernetes.secrets.name
设置要查找的 secret 的名称。type 为 String,默认为 ${spring.application.name}
spring.cloud.kubernetes.secrets.labels
设置用于查找 secret 的标签。此属性 通过基于 map 的绑定 来定义。type 是 java.util.Map,默认为 null
spring.cloud.kubernetes.secrets.paths
设置挂载 secret 的路径。这个属性根据 基于集合的绑定 的行为。type 是 java.util.List,default 为 null
spring.cloud.kubernetes.secrets.enableApi
通过 API 启用/禁用消耗的 secret。type 为 布尔值,默认为 false
注意

通过 API 访问 secret 可能会受安全原因为: preferred- the preferred 方法将 secret 挂载到 POD。