You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用kubectl create secret创建带目录结构的多组公私钥Secret

结论

完全可以通过原生kubectl create secret generic实现目标目录结构,不需要修改容器内业务逻辑,K8s原生支持Secret键的层级路径映射。

实现方式

方式1:创建Secret时直接指定带层级的键名

K8s Secret的键名支持包含/字符,当Secret被挂载为卷时,键名里的/会被自动识别为目录分隔符,生成对应的子目录结构。
创建Secret时,你可以给每个密钥文件指定带路径前缀的键,语法为--from-file=[自定义键名]=[本地文件路径],示例命令如下:

kubectl create secret generic multi-keys-secret \
  --from-file=1/public.key=./keys/1/public.key \
  --from-file=1/private.key=./keys/1/private.key \
  --from-file=2/public.key=./keys/2/public.key \
  --from-file=2/private.key=./keys/2/private.key \
  # 后续按相同格式追加第3到第n对密钥即可

创建完成后,Pod的卷挂载配置只需要把secretName替换为新创建的multi-keys-secret即可,注意修正你原有配置的缩进错误(secretName必须是secret字段的子属性,不能同级),正确配置如下:

spec:
  volumes:
    - name: my-keys
      secret:
        secretName: multi-keys-secret
  containers:
    # 其余容器配置保持不变
    volumeMounts:
      - name: my-keys
        readOnly: true
        mountPath: "/keys"

挂载完成后进入容器查看/keys目录,就是你需要的/keys/[编号]/public.key、/keys/[编号]/private.key层级结构,文件访问方式和之前单对密钥完全一致。

方式2:挂载时通过items字段自定义路径

如果你不想重建已有Secret,也可以直接在Pod的卷配置中通过items字段,给Secret里的每个密钥单独指定挂载的相对路径,不需要调整Secret本身,示例配置如下:

spec:
  volumes:
    - name: my-keys
      secret:
        secretName: my-existing-keys-secret # 替换为你已存了所有密钥的Secret名称
        items:
          - key: pub1 # 对应Secret中存储的第1对公钥的键名
            path: 1/public.key
          - key: pri1 # 对应Secret中存储的第1对私钥的键名
            path: 1/private.key
          - key: pubn
            path: n/public.key
          - key: prin
            path: n/private.key
  containers:
    # 其余容器配置保持不变
    volumeMounts:
      - name: my-keys
        readOnly: true
        mountPath: "/keys"

注意:使用items字段时,只有显式列在items列表里的密钥会被挂载到目录中,未列出的密钥不会出现在/keys路径下,需要确保所有需要访问的密钥都配置了对应的path规则。

内容的提问来源于stack exchange,提问作者Arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:39:38