1

我正在按照本指南使用机密:https ://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#secrets-propertysource 。

粗略地说。

  1. 保存秘密

  2. 在 deployment.yml 文件中引用秘密

       containers:
     - env:
        - name: DB_USERNAME
          valueFrom:
             secretKeyRef:
               name: db-secret
               key: username
        - name: DB_PASSWORD
          valueFrom:
             secretKeyRef:
               name: db-secret
               key: password
    
  3. 然后它说“您可以通过多种方式选择要使用的秘密:”并给出 3 个示例。但是,如果不执行任何这些步骤,我仍然可以完美地看到我的环境中的秘密。此外,步骤 1 和步骤 2 中的操作独立于 Spring Boot 操作(将机密保存并移动到环境变量中)

我的问题:

  1. 如果我进行第 3 步中建议的更改,它会对我的容器/应用程序/pod 进行哪些更改/改进?
  2. 有没有办法能够避免步骤 1 中的所有映射并将所有秘密放在一个环境中?
  3. 他们写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有秘密,他们怎么知道秘密在一个名为 /etc/ 的文件夹中
4

1 回答 1

1

您可以通过以下方式从秘密挂载所有环境变量:

      containers:
        - name: app
          envFrom:
          - secretRef:
              name: db-secret

至于 Spring 从哪里获得秘密 - 我不是 Spring 专家,但您提供的链接中似乎已经有解释:

启用后,Fabric8SecretsPropertySource 从以下来源查找 Kubernetes 的 Secret:

从秘密挂载中递归读取

以应用程序命名(由 spring.application.name 定义)

匹配一些标签

所以它从秘密挂载中获取秘密(如果你将它们挂载为卷)。它还扫描 Kubernetes API 中的秘密(我猜是在应用程序运行的相同命名空间中)。它可以通过使用 Kubernetes 服务帐户令牌来实现,默认情况下总是挂载到 pod 中。这取决于 Kubernetes RBAC 权限授予 pod 的服务帐户。

因此,它尝试使用 Kubernetes API 搜索秘密并将其与应用程序名称或应用程序标签进行匹配。

于 2021-01-26T13:58:51.443 回答