0
apiVersion: v1
kind: Secret
metadata:
  name: john-secret
data:
  USERNAME: abc=
  PASSWORD: def=

apiVersion: v1
kind: Secret
metadata:
  name: jane-secret
data:
  USERNAME: ghi=
  PASSWORD: jkl=

然后我可以将它们包括在内:

env:
  - name: JOHN_USERNAME
    valueFrom:
      secretKeyRef:
        name: john-secret
        key: USERNAME
  - name: JOHN_PASSWORD
    valueFrom:
      secretKeyRef:
        name: john-secret
        key: PASSWORD
  - name: JANE_USERNAME
    valueFrom:
      secretKeyRef:
        name: jane-secret
        key: USERNAME
  - name: JANE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: jane-secret
        key: PASSWORD

并在 Node.js 应用程序中使用它们,例如process.env.JOHN_USERNAME,等等。

这行得通,但是有没有一种更简洁/更简单的方法来为一群拥有多个字段的用户设置秘密?我想这会因为 100 个用户 x 5 个字段而变得混乱。

4

1 回答 1

3

您可以将机密安装为卷。改编链接的 Kubernetes 文档中的示例:

apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
spec:
  containers:
    - name: test-container
      image: nginx
      volumeMounts:
          - name: john-secret
            mountPath: /etc/john-secret
  volumes:
    - name: secret-volume
      secret:
        secretName: john-secret

如果您有一堆秘密,则需要将它们全部安装到 pod 规范中。这本身就是一个可维护性问题。

我认为实际上并没有什么能阻止您使用更结构化的数据对象(如 JSON 或 YAML 文件)作为密钥的值。与将其安装为卷相结合,这可以合理地工作。

如果你真的有很多秘密——许多“用户”,每个用户都有很多值——那么为秘密提供某种外部存储可能是一个更好的主意。如果它们只是用户名和密码,将密码的单向哈希存储在数据库中是很常见的(这也允许在不重新部署系统的情况下更新它们)。Hashicorp 的Vault之类的工具管理起来可能很复杂,但要优先考虑此内容的实际安全性,并且您可以更严格地控​​制谁可以访问实际机密。

于 2018-09-28T17:08:34.097 回答