无法从 WSL2 上的 Kind 集群节点访问 registry-1.docker.io

Unable to reach registry-1.docker.io from Kind cluster node on WSL2

我正在 WSL2 设置上使用种类部署设置和 airflow k8s 集群。当我执行标准 helm install $RELEASE_NAME apache-airflow/airflow --namespace $NS 时,它失败了。进一步调查显示集群工作节点无法连接到注册表-1.docker.io.

一次镜像拉取的错误日志

Failed to pull image "redis:6-buster": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/redis:6-buster": failed to resolve reference "docker.io/library/redis:6-buster": failed to do request: Head "https://registry-1.docker.io/v2/library/redis/manifests/6-buster": dial tcp: lookup registry-1.docker.io on 172.19.0.1:53: no such host

我可以从此节点访问所有其他网站,例如google.com, yahoo.com merriam-webster.com 等;甚至 docker.com 都有效。此问题非常特定于注册表-1.docker.io.

所有搜索和链接似乎都是围绕一般互联网连接问题。

当前解法: 如果我手动更改 kind worker 节点上的 /etc/resolv.conf 以指向 WSL2 Debian 主 IP 地址的 /etc/resolv.conf 中的 IP 地址,那么它将起作用。

但是,这是一个动态集群和节点,我不能每次都这样做。我目前正在寻找一种方法来使其成为集群配置的一部分。仅通过说 kind create cluster 即可使其工作的某种方式,默认情况下应该能够使用 kubectlhelm

但是,我更感兴趣的是弄清楚为什么此网络设置特别针对注册表-1.docker.io 失败。是否可以进行一些配置来避免将 DNS 更改为主机 IP 或 google DNS?由于当前的网络配置似乎适用于互联网的其余部分。

我已经在 github repositroy 上记录了所有步骤和调查细节,包括一些网络配置细节。如果您需要任何进一步的信息来帮助解决问题,请告诉我。随着我的进步,我会继续更新 github 文档。

设置:

Windows 11 有 WSL2 没有任何 Docker 桌面

WSL2 图像:Debian bullseye (11) docker 引擎开启 linux

Docker 版本:20.10.2

实物版本:0.11.1

实物图:kindest/node:v1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c 67c671ff9

我不确定它是否是答案。在花了 2 天时间试图找到解决方案之后。我想更改节点图像版本。在 Kind release page 上,它说 1.21 是 0.11.1 版本的最新图像。我什至无法使用 1.21 启动集群。 1.20 面对这个奇怪的 DNS 图像。 1.23也是如此。这样的图像一切正常。

然而,令我惊讶的是,当我将集群配置改回 1.20 时,DNS 问题消失了。所以,我没有因为图像的切换而发生什么变化,但我不能再次重现这个问题!也许它会对其他人有所帮助