了解 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。
大致说了。
保存秘密
参考 deployment.yml 文件中的秘密
containers:
- env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
然后它说“您可以 select 以多种方式使用 Secrets:”并给出了 3 个示例。但是,如果不执行任何这些步骤,我仍然可以完美地看到我的环境中的秘密。此外,第 1 步和第 2 步中的操作独立于 spring 启动(将机密保存并移动到环境变量中)
我的问题:
- 如果我进行第 3 步中建议的更改,changes/improvements 会对我的 container/app/pod 产生什么影响?
- 有没有办法能够避免步骤1中的所有映射并将所有秘密放在一个env中?
- 他们写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有秘密,他们怎么知道秘密在一个名为 /etc/
的文件夹中
您可以通过以下方式从 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 搜索机密并将它们与应用程序名称或应用程序标签进行匹配。
我正在按照本指南使用机密:https://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#secrets-propertysource。
大致说了。
保存秘密
参考 deployment.yml 文件中的秘密
containers: - env: - name: DB_USERNAME valueFrom: secretKeyRef: name: db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password
然后它说“您可以 select 以多种方式使用 Secrets:”并给出了 3 个示例。但是,如果不执行任何这些步骤,我仍然可以完美地看到我的环境中的秘密。此外,第 1 步和第 2 步中的操作独立于 spring 启动(将机密保存并移动到环境变量中)
我的问题:
- 如果我进行第 3 步中建议的更改,changes/improvements 会对我的 container/app/pod 产生什么影响?
- 有没有办法能够避免步骤1中的所有映射并将所有秘密放在一个env中?
- 他们写 -Dspring.cloud.kubernetes.secrets.paths=/etc/secrets 来获取所有秘密,他们怎么知道秘密在一个名为 /etc/ 的文件夹中
您可以通过以下方式从 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 搜索机密并将它们与应用程序名称或应用程序标签进行匹配。