简介
之前我都是直接在每一个 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