在 Kubernetes 中,可以使用 Secret 作为私有镜像仓库的认证凭证。配置 imagePullSecrets 让 Pod 能够拉取私有镜像。以下是完整的配置步骤。
1. 创建 Secret
使用 kubectl create secret docker-registry 命令创建 docker-registry 类型的 Secret。
kubectl create secret docker-registry my-registry-secret \
--docker-server=<YOUR_REGISTRY> \
--docker-username=<USERNAME> \
--docker-password=<PASSWORD> \
--docker-email=<EMAIL>
参数说明:
-
<YOUR_REGISTRY>:你的私有镜像仓库地址(例如registry.example.com或harbor.mycompany.com) -
<USERNAME>:登录镜像仓库的用户名 -
<PASSWORD>:登录镜像仓库的密码 -
<EMAIL>:邮箱(可以填your@email.com)
示例(Docker Hub 私有仓库)
kubectl create secret docker-registry my-registry-secret \
--docker-server=https://index.docker.io/v1/ \
--docker-username=mydockeruser \
--docker-password=mypassword \
--docker-email=myemail@example.com
2. 在 Pod 或 Deployment 配置 imagePullSecrets
创建 Pod 时,在 spec.imagePullSecrets 中引用 Secret:
apiVersion: v1
kind: Pod
metadata:
name: my-private-pod
spec:
containers:
- name: my-container
image: registry.example.com/my-private-image:latest
imagePullSecrets:
- name: my-registry-secret
Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-private-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: registry.example.com/my-private-image:latest
imagePullSecrets:
- name: my-registry-secret
3. 设置默认 imagePullSecrets(可选)
如果所有 Pod 都需要使用同一个私有仓库 Secret,可以 全局配置 imagePullSecrets,避免每个 Pod 都手动设置。
修改 default ServiceAccount
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-registry-secret"}]}' -n default
🔹 适用于 default 命名空间,如果是其他命名空间,需要修改 -n <namespace>。
4. 验证配置
可以创建 Pod 并检查镜像是否成功拉取:
kubectl get pods
kubectl describe pod my-private-pod
如果有 ErrImagePull 或 ImagePullBackOff 错误:
kubectl logs my-private-pod
kubectl describe pod my-private-pod
可能原因:
- Secret 名称错误
- 用户名/密码错误
- 镜像仓库地址错误
- 节点无法访问私有镜像仓库
总结
✅ 创建 Secret
✅ 在 Pod 或 Deployment 配置 imagePullSecrets
✅ (可选)全局配置 imagePullSecrets 到 ServiceAccount
✅ 检查拉取状态










网友评论