了解 kubernetes spring 引导应用程序中的采购秘密

Understanding sourcing secrets in kubernetes spring boot app

我正在按照本指南使用机密: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. 然后它说“您可以 select 以多种方式使用 Secrets:”并给出了 3 个示例。但是,如果不执行任何这些步骤,我仍然可以完美地看到我的环境中的秘密。此外,第 1 步和第 2 步中的操作独立于 spring 启动(将机密保存并移动到环境变量中)

我的问题:

  1. 如果我进行第 3 步中建议的更改,changes/improvements 会对我的 container/app/pod 产生什么影响?
  2. 有没有办法能够避免步骤1中的所有映射并将所有秘密放在一个env中?
  3. 他们写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有秘密,他们怎么知道秘密在一个名为 /etc/
  4. 的文件夹中

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

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

至于 Spring 从哪里得到秘密 - 我不是 Spring 方面的专家,但似乎在您提供的 link 中已经有了解释:

When enabled, the Fabric8SecretsPropertySource looks up Kubernetes for Secrets from the following sources:

Reading recursively from secrets mounts

Named after the application (as defined by spring.application.name)

Matching some labels

所以它从 secrets mount 中获取 secrets(如果你将它们作为卷装载)。它还会扫描 Kubernetes API 以寻找秘密(我猜在应用程序 运行 所在的相同命名空间中)。它可以通过利用 Kubernetes serviceaccount 令牌来实现,默认情况下,该令牌始终是 mounted 到 pod 中。这取决于给 pod 的 serviceaccount 赋予什么样的 Kubernetes RBAC 权限。

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