如何配置 kubernetes 从托管在同一集群中/内部的注册表中提取容器镜像

Mad*_*bat 6 networking kubernetes docker-registry kube-dns coredns

我试图让我的 kubernetes 集群从内部运行的容器注册表服务中拉取。我有 kube dns 设置,我有一个注册表部署和服务正在运行。我可以通过节点上的主机命令解析服务内部名称。我已经--dns使用 kube dns 服务的地址向 docker 守护进程添加了标志。我的 kubelet 运行时也将--cluster-dns标志设置为相同的地址。然而,不知何故,这就是我尝试使用此注册表创建 pod 时得到的结果。

Failed to pull image "kube-registry.kube-system.svc.cluster.local/myuser/myimage": rpc error: code = Unknown desc = Error response from daemon: Get https://kube-registry.kube-system.svc.cluster.local/v1/_ping: dial tcp: lookup kube-registry.kube-system.svc.cluster.local: no such host

不知何故,即使 kube dns 地址明确提供给 dockerd 和 kubelet,由于名称解析,从注册表服务中提取图像也会失败。我错过了什么?

小智 1

另一个解决方案是将 kube-dns IP 添加到resolv.conf

echo "nameserver $(kubectl -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}')" >> /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

CoreDNS 服务通过静态 IP公开,因此无需保持更新。

我可以确认它可以在 Ubunutu 18.04 上运行,尽管它resolv.conf是由systemd-resolved. 不需要额外的 DNS 配置。仅 FQDN 可用的服务:

root@dev:~# nslookup harbor.default.svc.cluster.local
;; Got SERVFAIL reply from 127.0.0.53, trying next server
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   harbor.default.svc.cluster.local
Address: 10.109.118.191
;; Got SERVFAIL reply from 127.0.0.53, trying next server
Run Code Online (Sandbox Code Playgroud)