在 Kubernetes 中,kubelet
默认需要访问容器镜像时,能够成功从 Docker 私有仓库拉取镜像。遇到验证问题时,通常需要解决 镜像仓库认证 和 TLS 证书配置 问题。以下是具体步骤:
1. 配置私有镜像仓库认证
如果私有镜像仓库需要身份验证,需要配置 imagePullSecrets
或在每个节点设置全局 Docker 登录。
方法 1:使用 imagePullSecrets
imagePullSecrets
是 Kubernetes 的方式,用于在 Pod 中指定 Docker 私有仓库的认证信息。
在 Kubernetes 节点登录私有仓库
docker login <私有仓库地址>
例如:
docker login myregistry.example.com
输入用户名和密码完成登录。
导出 Docker 配置为 Kubernetes 密钥
kubectl create secret docker-registry my-registry-secret \
--docker-server=<私有仓库地址> \
--docker-username=<用户名> \
--docker-password=<密码> \
--docker-email=<邮箱>
示例:
kubectl create secret docker-registry my-registry-secret \
--docker-server=myregistry.example.com \
--docker-username=admin \
--docker-password=secret \
--docker-email=admin@example.com
在 Pod 配置中使用 imagePullSecrets
在 Pod 配置文件中,添加以下内容:
apiVersion: v1
kind: Pod
metadata:
name: private-registry-pod
spec:
containers:
- name: my-container
image: myregistry.example.com/my-image:latest
imagePullSecrets:
- name: my-registry-secret
方法 2:在每个节点配置全局 Docker 登录
登录 Docker 仓库
docker login <私有仓库地址>
将 .docker/config.json
拷贝到 kubelet 使用的位置 确保 kubelet 使用的用户能访问 Docker 的认证信息。通常需要将配置文件复制到 /var/lib/kubelet
:
sudo cp ~/.docker/config.json /var/lib/kubelet/config.json
重启 kubelet 服务
sudo systemctl restart kubelet
2. 配置私有镜像仓库的 TLS 证书
如果私有仓库使用自签名证书或内部 CA 证书,需要确保节点可以信任这些证书。
方法 1:禁用 TLS 验证(不推荐,仅用于测试)
在每个节点的 Docker 或 containerd 配置中禁用 TLS 验证。
对于 Docker:
编辑 /etc/docker/daemon.json
,添加以下内容:
{
"insecure-registries": ["myregistry.example.com"]
}
重新加载 Docker:
sudo systemctl restart docker
对于 containerd:
编辑 /etc/containerd/config.toml
,添加以下内容:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."myregistry.example.com"]
endpoint = ["http://myregistry.example.com"]
重启 containerd:
sudo systemctl restart containerd
方法 2:添加私有仓库的 CA 证书(推荐)
获取 CA 证书 确保你有私有仓库的根 CA 证书文件(通常是 .crt
文件)。
在节点上安装证书 将证书复制到 /etc/ssl/certs
或 /usr/local/share/ca-certificates
:
sudo cp my-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
重启 Docker 或 containerd
sudo systemctl restart docker
sudo systemctl restart containerd
3. 验证配置
部署使用私有镜像的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: test-private-registry
spec:
containers:
- name: test-container
image: myregistry.example.com/my-image:latest
检查 Pod 是否运行:
kubectl get pods
查看事件日志检查错误信息:
kubectl describe pod test-private-registry
通过上述方法,可以解决 kubelet 下载私有镜像仓库的验证问题。在生产环境中,推荐使用 imagePullSecrets
和可信的 TLS 配置来保证安全性。
发布者:myrgd,转载请注明出处:https://www.object-c.cn/5047