Spring Cloud 秘密PropertySource

2024-01-08 17:19 更新

Kubernetes具有用于存储敏感数据(例如密码,OAuth令牌等)秘密的概念 该项目提供了与Secrets的集成,以使Spring Boot应用程序可以访问机密。您可以通过设置spring.cloud.kubernetes.secrets.enabled属性来显式启用或禁用此功能。

启用后,SecretsPropertySource将从以下来源中为Secrets查找Kubernetes:

  1. 从秘密坐骑递归读取
  2. 以应用程序命名(由spring.application.name定义)
  3. 匹配一些标签

注意:

默认情况下,出于安全原因,未启用通过API消费机密(以上第2点和第3点)机密上的权限“列表”允许客户端检查指定名称空间中的机密值。 此外,我们建议容器通过安装的卷共享机密。

如果您通过API启用使用机密,我们建议您使用授权策略(例如RBAC)限制对机密的访问。有关通过API使用“机密”时的风险和最佳做法的更多信息,请参阅此文档

如果找到了机密,则其数据可供应用程序使用。

假设我们有一个名为demo的spring boot应用程序,该应用程序使用属性读取其数据库配置。我们可以使用以下命令创建Kubernetes机密:

oc create secret generic db-secret --from-literal=username=user --from-literal=password=p455w0rd

前面的命令将创建以下秘密(您可以使用oc get secrets db-secret -o yaml来查看):

apiVersion: v1
data:
  password: cDQ1NXcwcmQ=
  username: dXNlcg==
kind: Secret
metadata:
  creationTimestamp: 2017-07-04T09:15:57Z
  name: db-secret
  namespace: default
  resourceVersion: "357496"
  selfLink: /api/v1/namespaces/default/secrets/db-secret
  uid: 63c89263-6099-11e7-b3da-76d6186905a8
type: Opaque

请注意,数据包含create命令提供的文字的Base64编码版本。

然后,您的应用程序可以使用此秘密-例如,通过将秘密的值导出为环境变量:

apiVersion: v1
kind: Deployment
metadata:
  name: ${project.artifactId}
spec:
   template:
     spec:
       containers:
         - env:
            - name: DB_USERNAME
              valueFrom:
                 secretKeyRef:
                   name: db-secret
                   key: username
            - name: DB_PASSWORD
              valueFrom:
                 secretKeyRef:
                   name: db-secret
                   key: password

您可以通过多种方式选择要使用的秘密:

  1. 通过列出映射机密的目录:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/db-secret,etc/secrets/postgresql

    如果您已将所有机密映射到公共根,则可以将它们设置为:

    -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets
  2. 通过设置命名机密:

    -Dspring.cloud.kubernetes.secrets.name=db-secret
  3. 通过定义标签列表:

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

表140.2。Properties:

名称 类型 默认 描述

spring.cloud.kubernetes.secrets.enableApi

Boolean

false

通过API启用或禁用使用机密(示例2和3)

spring.cloud.kubernetes.secrets.enabled

Boolean

true

启用机密PropertySource

spring.cloud.kubernetes.secrets.name

String

${spring.application.name}

设置要查找的机密名称

spring.cloud.kubernetes.secrets.namespace

String

客户端名称空间

设置Kubernetes命名空间的查找位置

spring.cloud.kubernetes.secrets.labels

Map

null

设置用于查找机密的标签

spring.cloud.kubernetes.secrets.paths

List

null

设置安装机密的路径(示例1)


笔记:

  • spring.cloud.kubernetes.secrets.labels属性的行为如 基于Map的绑定 所定义
  • spring.cloud.kubernetes.secrets.paths属性的行为与 基于Collection的binding 定义的行为相同
  • 出于安全原因,可能会限制通过API访问机密。首选方法是将机密安装到Pod。

您可以在spring-boot-camel-config中找到使用机密的应用程序示例(尽管尚未更新以使用新的spring-cloud-kubernetes项目)。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号