Kubernetes 如何将一个不同的秘密装入由StatefulSet管理的每个Pod中?

Kubernetes 如何将一个不同的秘密装入由StatefulSet管理的每个Pod中?,kubernetes,statefulset,kubernetes-statefulset,Kubernetes,Statefulset,Kubernetes Statefulset,我有3个不同的库伯尼特斯秘密,我想把每个秘密装入它自己的Pod,由一个有3个副本的状态集管理 是否可以将StatefulSet配置为将每个机密装入其自己的Pod中?不太可能。StatefulSet(以及任何工作负载控制器)只允许一个pod定义模板(它可以有多个容器)。问题是一个StatefulSet被设计为有N个副本,因此可以有N个秘密。它必须是一个SecretStatefulSet:一个不同的控制器 一些解决方案: 您可以定义一个包含所有播客所需的所有秘密的单个播客。缺点是你必须在豆荚间分享

我有3个不同的库伯尼特斯秘密,我想把每个秘密装入它自己的Pod,由一个有3个副本的状态集管理

是否可以将StatefulSet配置为将每个机密装入其自己的Pod中?

不太可能。StatefulSet(以及任何工作负载控制器)只允许一个pod定义模板(它可以有多个容器)。问题是一个StatefulSet被设计为有N个副本,因此可以有N个秘密。它必须是一个SecretStatefulSet:一个不同的控制器

一些解决方案:

  • 您可以定义一个包含所有播客所需的所有秘密的单个播客。缺点是你必须在豆荚间分享秘密。例如:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      pod1: xxx
      pod2: xxx
      pod3: xxx
      ...
      podN: xxx
    
  • 使用类似的工具,并使用诸如
    pod1
    pod2
    pod3
    、…
    podN
    等密钥远程存储您的秘密。您也可以使用。在国际海事组织看来,这似乎是一个更为坚实的解决方案,但实施起来可能需要更长的时间


在任何情况下,您都必须确保机密的数量与您所在州的播客数量相匹配。

我想这正是您要寻找的

本质上,它在
PodSpec
模板上使用自定义注释,如:

      annotations:
        spoditor.io/mount-volume: |
          {
            "volumes": [
              {
                "name": "my-volume",
                "secret": {
                  "secretName": "my-secret"
                }
              }
            ],
            "containers": [
              {
                "name": "nginx",
                "volumeMounts": [
                  {
                    "name": "my-volume",
                    "mountPath": "/etc/secrets/my-volume"
                  }
                ]
              }
            ]
          }
现在,StatefulSet的每个Pod中的
nginx
容器将尝试以
my secret-{Pod ordinal}
的模式装载自己的专用机密

您只需确保
my-secret-0
my-secret-1
等存在于StatefulSet的相同命名空间中


在项目文档中有更高级的注释用法。

谢谢,是的,我也这么认为-讽刺的是,我正在尝试运行Hashicorp Vault/Consor,但会使用类似于您建议的东西作为输入,我已经添加了详细的说明,说明了它的帮助。感谢您花时间修复。