• 分享帖
  • Kubeshpere4.1在保密字典添加harbor仓库报错问题解决

创建部署问题时,请参考下面模板,你提供的信息越多,越容易及时获得解答。如果未按模板创建问题,管理员有权关闭问题。
确保帖子格式清晰易读,用 markdown code block 语法格式化代码块。
你只花一分钟创建的问题,不能指望别人花上半个小时给你解答。

KubeSphere版本信息
v4.1, 离线安装,并且独立安装了Harbor仓库

问题
Kubeshpere环境安装完成后,需要从私有得Harbor仓库拉取业务镜像,在保密字典创建私有仓库镜像服务时, 报如下错误 :

问题主要是因为 Kubeshpere 在自己的镜像中通过OCI API 调用私有Harbor时, 域名无法解析。因此整个思路是在CoreDNS解析中, 增加一个对 dockerhub.kubekey.local 域名的地址解析 。

1、首先,查看当前的 CoreDNS 的配置, 并备份

kubectl get cm coredns -n kube-system -o yaml

2、 修改 CoreDNS 的配置, 增加 dockerhub.kubekey.local 地址解析的Hosts插件

3、修改完CoreDNS 的配置后, 可以通过删除coredns来重启镜像 :

kubectl delete po -l k8s-app=kube-dns -n kube-system

4、 此时,CoreDNS的配置是不生效的,因为KubeShpere 同时安装了CoreDNS与 nodelocalDNS 使用, 而nodelocaldns 默认是读取本机Linux操作系统的 /etc/resolv.conf 解析DNS的, 因此需要将 nodelocaldns 的上游指向CoreDNS :

5、 修改完成后,重启 nodelocaldns 生效

kubectl delete po -l k8s-app=nodelocaldns -n kube-system

至此, 可以通过在 CoreDNS中增加域名解析来为 整个Kubernetes集群增加 DNS解析, 其实通过 Linux 修改 /etc/resolv.conf 也是一样的效果, 但是修改很多主机比较麻烦 。

改问题的关键是 在整个Kubernetes 集群中, 使用了 nodelocaldns 与 coredns 2级DNS解析, 而nodelocaldns 只有部分解析指向了 coredns, .53 的默认解析指向了本地的 DNS解析文件, 因此 需要让nodelocaldns 把默认的解析也指向 CoreDNS, 这样在CoreDNS中增加域名, 就全局生效了 。