【问题标题】:How can I mount a single distinct Secret into each Pod managed by a StatefulSet?如何将一个不同的 Secret 挂载到 StatefulSet 管理的每个 Pod 中?
【发布时间】:2019-02-25 23:26:51
【问题描述】:

我有 3 个不同的 Kubernetes Secret,我想将每一个都挂载到自己的 Pod 中,由具有 3 个副本的 StatefulSet 管理。

是否可以配置 StatefulSet 使每个 Secret 都挂载到自己的 Pod 中?

【问题讨论】:

    标签: kubernetes statefulset kubernetes-statefulset


    【解决方案1】:

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

    一些解决方案:

    • 您可以定义一个 Kubernetes secret,其中包含所有 pod 所需的所有机密。缺点是您必须在 pod 之间共享秘密。例如:

      apiVersion: v1
      kind: Secret
      metadata:
        name: mysecret
      type: Opaque
      data:
        pod1: xxx
        pod2: xxx
        pod3: xxx
        ...
        podN: xxx
      
    • 使用Hashicorp's Vault 之类的东西,并使用pod1pod2pod3、...podN 等密钥远程存储您的秘密。您也可以使用HSM。这似乎是 IMO 更可靠的解决方案,但实施可能需要更长的时间。

    在所有情况下,您都必须确保 Secret 的数量与 StatefulSet 中的 pod 数量相匹配。

    【讨论】:

    • 谢谢,是的,我想了很多 - 具有讽刺意味的是,我正在尝试运行 Hashicorp Vault/Consul,但会使用你建议的东西
    【解决方案2】:

    我猜这正是您要寻找的。 https://github.com/spoditor/spoditor

    本质上,它使用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-0my-secret-1 等存在于 StatefulSet 的同一命名空间中。

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

    【讨论】:

    • 感谢您的意见,我已经添加了详细的描述它如何提供帮助。
    • 感谢您花时间修复。
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2019-05-24
    • 2021-12-30
    相关资源
    最近更新 更多