You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s v1.9中Docker Registry:2.6.2不安全仓库内部拉取镜像失败问题

解决Kubernetes集群内部无法拉取不安全Registry镜像的问题

嘿,我来帮你搞定这个集群内部拉取镜像的问题!你遇到的Proxy Authentication Required错误,大概率是节点上的Docker或kubelet代理配置没排除内部服务域名导致的,咱们一步步来排查解决:

首先先明确报错核心:

Failed to pull image "registry.default.svc.cluster.local/elasticsearch:6.0.0": rpc error: code = Unknown desc = Error response from daemon: Get https://registry.default.svc.cluster.local/v1/_ping : Proxy Authentication Required

这个错误说明节点上的Docker daemon在访问内部Registry Service域名时,错误地走了代理,但代理需要认证(或者根本不该走代理访问内部服务)。下面是具体解决步骤:

1. 修正Docker daemon的代理配置,排除内部域名

很多时候节点配置了全局代理,但没把K8s集群内部的域名/IP段加入NO_PROXY列表,导致访问内部服务时也走代理:

  • 检查Docker的代理配置文件,通常是/etc/systemd/system/docker.service.d/http-proxy.conf,或者直接查看/etc/docker/daemon.json里的代理配置(如果有的话)
  • 确保NO_PROXY环境变量包含K8s集群的服务域名后缀、内部IP段,比如:
    NO_PROXY=localhost,127.0.0.1,default.svc.cluster.local,.svc.cluster.local,10.96.0.0/12,192.168.0.0/16
    
    (IP段根据你的集群Pod/Service CIDR调整,10.96.0.0/12是K8s默认的Service CIDR)
  • 修改后重新加载配置并重启Docker:
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

2. 确保所有集群节点都配置了正确的insecure-registries

你已经在某个节点配置了不安全仓库,但所有集群节点(Master+Worker)都需要同步这个配置——因为kubelet是在各个节点上调用Docker拉取镜像的:

  • 登录每个节点,检查/etc/docker/daemon.json是否同时包含外部NodePort地址和内部Service域名:
    {
      "insecure-registries": ["xx.xx.xx.xxx:30002", "registry.default.svc.cluster.local:5000"]
    }
    
    注意这里要加上Registry Service的域名和对应端口(默认Registry容器暴露的是5000端口,Service的端口要和它对应)
  • 修改后重启Docker:
    sudo systemctl restart docker
    

3. 验证Registry Service的连通性

先确认你的Registry Service是否正确指向了Pod,端口映射没问题:

  • 查看Service的详细配置:
    kubectl get svc registry -o yaml
    
    确保spec.ports里的targetPort是Registry容器的暴露端口(默认5000),port是Service的端口(比如5000)
  • 在集群内部的临时Pod里测试访问Registry:
    kubectl run -it --rm busybox --image=busybox:1.28 -- wget -O- http://registry.default.svc.cluster.local:5000/v2/_catalog
    
    如果能正常返回镜像列表,说明Service是通的;如果还是报代理错误,那就是节点的代理配置没彻底解决。

4. 检查kubelet的代理配置(如果有设置)

有些集群会给kubelet单独配置代理,这也可能影响镜像拉取:

  • 查看kubelet的配置文件,比如/etc/systemd/system/kubelet.service.d/10-kubeadm.conf或者/var/lib/kubelet/config.yaml
  • 确保kubelet的环境变量里也设置了NO_PROXY,内容和Docker的NO_PROXY保持一致
  • 修改后重启kubelet:
    sudo systemctl restart kubelet
    

5. 测试镜像拉取

完成上述配置后,在集群内部测试拉取镜像:

kubectl run -it --rm test-registry --image=registry.default.svc.cluster.local/elasticsearch:6.0.0

如果能正常启动Pod,说明问题已经解决啦!


内容的提问来源于stack exchange,提问作者bladerunner512

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:38:06