【问题标题】:Understanding sourcing secrets in kubernetes spring boot app了解 Kubernetes Spring Boot 应用程序中的采购秘密
【发布时间】:2021-01-25 20:18:22
【问题描述】:

我正在按照本指南使用秘密: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 中的所有映射,并将所有秘密放在一个 env 中?
  3. 他们编写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有机密,他们怎么知道机密在名为 /etc/ 的文件夹中

【问题讨论】:

    标签: spring-boot kubernetes spring-autoconfiguration


    【解决方案1】:

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

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

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

    启用后,Fabric8SecretsPropertySource 会在 Kubernetes 中查找 来自以下来源的秘密:

    从秘密挂载中递归读取

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

    匹配一些标签

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 2020-06-11
      • 2023-03-11
      • 2018-12-26
      • 2018-09-07
      • 2019-07-20
      • 2021-10-24
      • 2016-02-16
      相关资源
      最近更新 更多