没有这样的主机:Docker守护程序无法访问kubernetes注册表,但是同一节点上的wget可以连接到注册表

问题描述 投票:1回答:1

我在单节点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
docker kubernetes alpine
1个回答
1
投票

Kubernetes将内部DNS服务器注入到pod的/etc/resolv.conf文件中。这就是为什么您可以从Pod访问注册表的原因。

通常,此DNS服务不会在Pod网络外部公开。

[使用docker命令时,您位于host内部,主机将指向无法解析注册表内部服务名称的其他DNS服务器。

要从您的主机访问注册表,您需要在下面。

1)将注册表Service公开为NodePortLoadBalancer

((在测试环境中,请使用NodePortdoc link

2)创建正确的DNS条目以将名称解析为IP(在NodePort服务的情况下,此处IP将是节点的IP)。由于只有一个节点,因此在/etc/hosts文件中创建一个条目以解析注册表FQDN。

© www.soinside.com 2019 - 2024. All rights reserved.