我在单节点kubernetes集群上有一个基于Alpine Linux的节点(用于测试)。我在docker-registry.default:5000
的群集中安装了一个私有Docker注册表。我可以登录到高山节点并使用wget
并访问我的私有Docker注册表。
kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # wget -qO- https://docker:[email protected]:5000/v2/_catalog
{"repositories":["nuclio/processor-helloworld3"]}
但是我似乎无法在同一容器上使用docker访问它。客户端和服务器都是2019版本
kubectl exec -it pod/nuclio-dashboard-5c5c48947b-lpgx8 -- /bin/sh
/ # which docker
/usr/local/bin/docker
/ # docker login -u docker -p mypassword docker-registry.default:5000
Error response from daemon: Get https://docker-registry.default:5000/v2/: dial tcp: lookup docker-registry.default on 169.254.169.254:53: no such host
我可以登录到Docker Hub注册表。
docker login -u my_hub_user -p my_hub_password
Login Succeeded
Kubernetes将内部DNS服务器注入到pod的/etc/resolv.conf文件中。这就是为什么您可以从Pod访问注册表的原因。
通常,此DNS服务不会在Pod
网络外部公开。
[使用docker命令时,您位于host
内部,主机将指向无法解析注册表内部服务名称的其他DNS服务器。
要从您的主机访问注册表,您需要在下面。
1)将注册表Service
公开为NodePort
或LoadBalancer
((在测试环境中,请使用NodePort
)doc link
2)创建正确的DNS条目以将名称解析为IP(在NodePort
服务的情况下,此处IP将是节点的IP)。由于只有一个节点,因此在/etc/hosts
文件中创建一个条目以解析注册表FQDN。