首页 公告 项目 RSS

⬇️⬇️⬇️ 欢迎关注我的 telegram 频道和 twitter ⬇️⬇️⬇️


联系方式: Twitter Github Email Telegram

解决 Kubernetes Pod 拉取私有镜像问题的正确姿势

July 31, 2025 本文有 503 个字 需要花费 2 分钟阅读

简介

之前我都是直接在每一个 ns 下创建一个 Secret 并手动在 Pod 的 spec.imagePullSecrets 字段中引用,以实现从私有镜像仓库拉取镜像。后来发现可以通过在 ServiceAccount(如 default ServiceAccount)的 imagePullSecrets 字段指定 Secret,这样只要 Pod 使用该 ServiceAccount(并且没有在 spec 里单独指定 imagePullSecrets),就会自动使用指定的凭据来拉取私有镜像。这样就不用在每个 Pod 的 spec 里都单独写 imagePullSecrets 了,集中管理也更方便。也就是说如果我给default ServiceAccount 添加了 imagePullSecrets,那么所有使用 default ServiceAccount 的 Pod 都会自动使用这个 Secret 来拉取私有镜像。因为默认情况下,Pod 会使用 default ServiceAccount。所以只要 Pod 没有显式指定其他 ServiceAccount,就会自动使用 default ServiceAccount 的 imagePullSecrets。

操作

创建 Secret

kubectl create secret docker-registry my-registry-secret \
  --docker-server=<your-registry-server> \
  --docker-username=<your-username> \
  --docker-password=<your-password>

将 Secret 添加到 default ServiceAccount 的 imagePullSecrets 字段

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-registry-secret"}]}'

验证

可以通过以下命令查看 default ServiceAccount 的 imagePullSecrets 是否已经添加成功:

kubectl get serviceaccount default -o jsonpath='{.imagePullSecrets}'

创建一个 Pod 来验证是否可以成功拉取私有镜像:

apiVersion: v1
kind: Pod
metadata:
  name: my-private-pod
spec:
  containers:
  - name: my-container
    image: <your-private-image>

如果 Pod 成功创建并运行,说明已经可以通过 default ServiceAccount 的 imagePullSecrets 成功拉取私有镜像。

欢迎关注我的博客www.bboy.app

Have Fun