在 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
✅ 检查拉取状态