如何为一群拥有多个字段的用户设置秘密?

How to set secrets for a bunch of users that will have multiple fields?

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,等等。

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

你可以mount the secret as a volume。改编链接的 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 文件,作为机密的值。这可以与将其作为卷安装结合使用。

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