云服务访问私有网络镜像仓库异常

370 阅读2分钟

本文记录一个我在腾讯云上申请了一个集群,且打通了自己的私有网络和腾讯云网络后,无法拉取私有镜像仓库的镜像的问题的整个解决过程。

问题:

镜像仓库harbor所在私有网络已经和腾讯云网络打通,但是还是无法拉取镜像,报如下错误:

image.png

解决过程:

首先确认集群网络是否和镜像仓库所在私有网络打通

在集群上安装了一个测试网络的服务,在pod内部ping镜像仓库的域名,也ok。

部署一个可以测试网络的服务

github.com/luksa/kuber…

apiVersion: apps/v1
kind: Deployment
metadata:
  name: curl
  labels:
    app: curl
spec:
  revisionHistoryLimit: 1
  replicas: 1
  selector:
    matchLabels:
      app: curl
  template:
    metadata:
      labels:
        app: curl
    spec:
      containers:
        - name: curl
          image: tutum/curl
          command: ["sleep", "9999999"]

kubectl exec -it curl-655bc7659f-zws2f bash

在coredns中添加镜像仓库域名和IP的映射

报错不就是解析镜像仓库域名,有问题吗?我直接给集群的coredns加上映射不就行了

            hosts {
                10.19.141.29 xxxxxx.yyy.com
                fallthrough
            }   

仍然不行!

恍然大悟

其实在curl这个测试容器中可以ping通镜像仓库的域名,说明域名解析肯定是没问题的,但只是说明k8s的容器网络已经通过某种方式可以解析我私网域名。 问题出在拉取镜像,k8s集群拉取镜像使用的是服务所在ECS宿主机上的docker-daemon,使用的是宿主机的网络。那应该是宿主机上解析dns有问题,查看宿主机的/etc/resolve.conf里面的dns地址是腾讯云的公网dns服务器,我的私有网络是有自己的dns的,腾讯云的公网dns服务器肯定无法解析我私网里的域名。

修改/etc/resolve.conf里的域名服务器,将我的私网dns地址放到第一行,问题立马解决。