首页/开发/CI/CD 与发布速查/imagePullSecrets 与私有仓库拉取
环境与配置管理60 条

imagePullSecrets 与私有仓库拉取

私有镜像拉取凭据:把 docker-registry 类型 Secret 挂到工作负载或 ServiceAccount 上,跨命名空间需显式复制。

CI/CD 与发布速查开发更新于 2026-10-13

私有镜像拉取凭据怎么配

私有镜像拉取凭据的标准做法:把 docker-registry 类型 Secret 挂到工作负载或 ServiceAccount 上。Secret 不跨命名空间共享,多命名空间要么逐一复制,要么用平台级分发方案。优先考虑用平台身份或短期令牌换取拉取凭据,减少长期账号暴露面,也更便于审计。

基本信息

创建kubectl create secret docker-registry regcred --docker-server=... --docker-username=... --docker-password=...
挂载Pod spec 的 imagePullSecrets 或 ServiceAccount 默认拉取凭据
跨命名空间Secret 不跨命名空间共享,按命名空间分发或使用平台方案
类型kubernetes.io/dockerconfigjson
优先能免长期凭据就免:平台身份或短期令牌方案

典型使用场景

  • 单命名空间:直接挂到 Pod 或 ServiceAccount
  • 多命名空间:脚本化复制或平台分发
  • 统一入口:挂到 ServiceAccount 让同 SA 的 Pod 默认可用
  • 凭据轮换:更新 Secret 后滚动重启工作负载
  • 拉取失败排查:结合 Pod 事件定位是凭据还是网络问题,不同错误码指向不同方向
  • 平台化:用云厂商工作负载身份替代 Secret,凭据生命周期交给平台

创建与挂载

创建与挂载
# 创建拉取凭据(注意命名空间归属)
kubectl create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username="$REGISTRY_USER" \
  --docker-password="$REGISTRY_PASSWORD" -n prod
# 挂到 ServiceAccount,该 SA 下的 Pod 默认可用拉取凭据

常见失败信号

现象原因处理
ImagePullBackOff凭据缺失或过期查 Secret 与 Pod 事件
401 unauthorized用户名密码错误或令牌过期更新 Secret 并滚动重启
跨命名空间拉不到Secret 没复制过去按命名空间分发
优先使用云侧工作负载身份或短期令牌换取拉取凭据:减少长期账号。
排查先看事件:kubectl describe pod 里 Failed to pull 的错误码比猜更可靠。
更新 Secret 后已运行的 Pod 不会自动换凭据:需要滚动重启让新凭据生效。
把 Secret 分发脚本化:新命名空间创建即自动带上拉取凭据,减少手工遗漏。
已有 docker login 登录态的机器可直接整体导入:kubectl create secret generic regcred --from-file=.dockerconfigjson=$HOME/.docker/config.json --type=kubernetes.io/dockerconfigjson;CI 场景则用变量拼装,避免把带登录态的机器文件带进流水线。

易错点

  • 把仓库凭据散落在每个工作负载:集中到 ServiceAccount 或平台方案
  • 凭据过期无告警:拉取失败才被发现,监控拉取错误率
  • 凭据写进 Deployment 注释或 ConfigMap:泄露且难轮换,集中到 Secret
  • 多命名空间手工复制漏一处:新环境拉取失败,复制脚本化
  • Secret 权限过宽:能读 Secret 等于拿到拉取权限,按 RBAC 收紧,读权限名单定期复核
  • 只在拉取失败后临时修:没有轮换与告警流程,问题会反复出现,把轮换与告警写成例行任务

数据来源与参考

  • Kubernetes 文档《Pull an Image from a Private Registry》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌