代码之家  ›  专栏  ›  技术社区  ›  Funzo

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

  •  0
  • Funzo  · 技术社区  · 5 年前

    我按照这个指南来消费秘密: 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中的操作独立于弹簧引导(将机密保存并移动到环境变量中)

    我的问题:

    1. 如果我进行了步骤3中建议的更改,它对我的容器/app/pod做了哪些更改/改进?
    2. 难道没有办法避免步骤1中的所有映射,并将所有机密放入环境中吗?
    3. 他们写-Dspring.cloud.kubernes.secrets.paths=/etc/secrets来获取所有秘密,他们怎么知道秘密在一个名为/etc的文件夹中/
    0 回复  |  直到 5 年前
        1
  •  1
  •   Dharman vijay    5 年前

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

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

    至于Spring的秘密来自哪里——我不是Spring的专家,但你提供的链接中似乎已经有了解释:

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

    从秘密挂载中递归读取

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

    匹配一些标签

    因此,它从secrets挂载中获取秘密(如果你将它们作为卷挂载)。它还扫描Kubernetes API以查找机密(我猜该应用程序运行在相同的名称空间中)。它可以通过使用Kubernetes服务帐户令牌来实现,默认情况下,该令牌始终为 mounted 进入吊舱。这取决于Kubernetes RBAC对pod服务帐户的权限。

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

    推荐文章