在 Kubernetes 中,解决kubelet下载docker私有仓库验证问题

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

Like (0)
Previous 2024年12月2日 下午5:22
Next 2024年12月2日 下午10:54

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信