9.4. 使用 Secrets PropertySource
Kubernetes 具有用于存储敏感数据的 secret 的概念,如密码、OAuth 令牌等。Spring cloud Kubernetes 插件提供与 Secret
集成,使 secret 可以被 Spring Boot 访问。
启用时的 Secrets
属性源将从以下源中查找 Kubernetes 的 Secret
。如果找到 secret,则应用程序可使用其数据。
- 从 secret 挂载递归读取
-
在应用程序后命名(请参阅
spring.application.name
) - 匹配某些标签
请注意,默认情况下,通过 API (上面的点 2 和 3)消耗 Secret 不会被启用。
9.4.1. 设置 Secret 的示例 复制链接链接已复制到粘贴板!
假设我们有一个名为 demo
的 Spring Boot 应用,它使用属性来读取其 ActiveMQ 和 PostreSQL 配置。
amq.username amq.password pg.username pg.password
amq.username
amq.password
pg.username
pg.password
这些 secret 可以外部化为 YAML 格式的 Secret
:
- ActiveMQ 机密
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PostreSQL Secret
9.4.2. 消耗 secret 复制链接链接已复制到粘贴板!
您可以以多种方式选择要使用的 Secret:
通过列出 secret 映射的目录:
-Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/activemq,etc/secrets/postgres
-Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/activemq,etc/secrets/postgres
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您有所有 secret 都映射到一个通用 root,您可以设置它们,如下所示:
-Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
-Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过设置命名的 secret:
-Dspring.cloud.kubernetes.secrets.name=postgres-secrets
-Dspring.cloud.kubernetes.secrets.name=postgres-secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过定义标签列表:
-Dspring.cloud.kubernetes.secrets.labels.broker=activemq -Dspring.cloud.kubernetes.secrets.labels.db=postgres
-Dspring.cloud.kubernetes.secrets.labels.broker=activemq -Dspring.cloud.kubernetes.secrets.labels.db=postgres
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.4.3. Secrets PropertySource 的配置属性 复制链接链接已复制到粘贴板!
您可以使用以下属性配置 Secrets 属性源:
- spring.cloud.kubernetes.secrets.enabled
-
启用 Secrets 属性源。type 是
布尔值
,默认为true
。 - spring.cloud.kubernetes.secrets.name
-
设置要查找的机密的名称。type 为
String
,默认为${spring.application.name}
。 - spring.cloud.kubernetes.secrets.labels
-
设置用于查找 secret 的标签。此属性的行为由 基于映射的绑定 定义。类型为
java.util.Map
,默认为null
。 - spring.cloud.kubernetes.secrets.paths
-
设置挂载 secret 的路径。此属性的行为由 基于集合的绑定 定义。类型为
java.util.List
,默认为null
。 - spring.cloud.kubernetes.secrets.enableApi
-
通过 API 启用/禁用消耗 secret。type 是
布尔值
,默认为false
。
由于安全原因,可以通过 API 访问 secret,因为安全原因是,将 secret 挂载到 POD。