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

Kubernetes中如何将Secret正确挂载至/run/secrets目录?

解决Kubernetes中Secret挂载至/run/secrets目录的冲突问题

错误原因分析

你遇到的问题源于将自定义Secret直接挂载到了/run/secrets整个目录——Kubernetes默认会自动将服务账户(ServiceAccount)相关凭证挂载到/run/secrets/kubernetes.io/serviceaccount路径下。当你把/run/secrets挂载为只读的Secret卷后,kubelet无法在这个只读目录下创建kubernetes.io子目录,从而触发挂载失败的错误。

解决方案:挂载单个Secret文件而非整个目录

无需覆盖整个/run/secrets目录,只需将Secret中的webhook_secret文件单独挂载到目标路径即可,既满足应用对文件路径的要求,也不会干扰Kubernetes默认的服务账户挂载逻辑。

修改后的Pod配置示例

...
volumeMounts:
  - name: webhook-secret
    mountPath: "/run/secrets/webhook_secret"  # 直接挂载到应用要求的文件路径
    subPath: webhook_secret                   # 指定Secret中的键名作为挂载后的文件名
    readOnly: true
volumes:
  - name: webhook-secret
    secret:
      secretName: webhook-secret              # 对应你创建的Secret名称
...

原理说明

  • subPath参数指定仅将Secret中名为webhook_secret的条目挂载为目标路径下的同名文件,而非覆盖整个/run/secrets目录。
  • 保留/run/secrets目录的原有权限后,kubelet可以正常创建kubernetes.io/serviceaccount子目录并挂载服务账户凭证,避免冲突。

验证方法

应用新配置启动Pod后,进入容器检查:

kubectl exec -it <pod-name> -n my-app -- cat /run/secrets/webhook_secret

应能看到Secret内容123,同时/run/secrets/kubernetes.io/serviceaccount目录也会正常存在。

内容的提问来源于stack exchange,提问作者Thomas W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:25:00