K8S工作节点Pod无法访问Master部署的私有镜像仓库
排查步骤
1. 修正镜像仓库地址的核心错误
报错显示Worker节点尝试连接[::1]:31320,这是因为Pod的镜像地址使用了localhost:31320/...——localhost在Worker节点指向的是Worker自身,而非部署私有仓库的Master节点,这是问题根源。
- 将镜像地址替换为以下任一可访问地址:
- Master节点的集群内IP(如
10.xx.xx.xx:31320/automation-platform/base:11.0.15.1.centos.7.9.2009.2) - Master节点的物理主机IP(如
192.168.x.x:31320/automation-platform/base:11.0.15.1.centos.7.9.2009.2) - 若私有仓库通过K8S Service暴露,使用集群内Service域名(如
registry-svc.default.svc.cluster.local:5000/...)
- Master节点的集群内IP(如
- 验证:在Worker节点执行
curl http://<Master-IP>:31320/v2/,返回{}则说明网络连通正常。
2. 适配K8S 1.23的容器运行时变化
从K8S 1.20到1.23,容器运行时的默认配置有调整,需针对性检查:
- 若使用containerd:
编辑/etc/containerd/config.toml,添加私有仓库的镜像配置:
重启containerd:[plugins."io.containerd.grpc.v1.cri".registry.mirrors."<Master-IP>:31320"] endpoint = ["http://<Master-IP>:31320"]systemctl restart containerd - 若仍使用Docker:
检查/etc/docker/daemon.json是否配置了该私有仓库为不安全仓库(因为你的仓库使用HTTP协议):
重启Docker:{ "insecure-registries": ["<Master-IP>:31320"] }systemctl restart docker
3. 检查私有仓库的网络可达性
- 在Worker节点执行
nc -zv <Master-IP> 31320或telnet <Master-IP> 31320,确认端口是否连通:- 若不通,检查Master节点防火墙是否开放31320端口
- 检查Flannel网络状态:在Worker节点ping Master的Pod IP,确认跨节点网络正常
- 确认Master上的私有仓库容器端口映射是否为
0.0.0.0:31320->5000/tcp(若绑定到127.0.0.1,Worker将无法访问),执行docker ps | grep registry查看
4. 验证镜像拉取密钥的有效性
- 确认密钥与Pod处于同一个Namespace:若Pod不在
defaultNamespace,密钥必须同步创建在对应Namespace - 检查密钥类型是否为
kubernetes.io/dockerconfigjson:执行kubectl get secret <secret-name> -o yaml查看 - 手动测试拉取:在Worker节点将密钥中的
.dockerconfigjson内容导出到~/.docker/config.json,执行docker pull <Master-IP>:31320/automation-platform/base:11.0.15.1.centos.7.9.2009.2,验证是否能成功拉取
5. 检查kubelet运行时配置
- 查看kubelet配置文件(通常为
/var/lib/kubelet/config.yaml),确认imagePullPolicy配置正确,且runtimeEndpoint指向当前使用的容器运行时socket(如containerd的unix:///run/containerd/containerd.sock)
内容的提问来源于stack exchange,提问作者Seb tummi tetred13
相关产品推荐
相关产品推荐

