What
使用 kind 在本地运行集群时,拉取镜像总是有这样的报错:
| |
Why
问题的根源在于 网络隔离层级 搞错了。
在 kind 的架构中,K8s 的“节点”其实是运行在宿主机上的 Docker 容器。
- 宿主机的视角:
127.0.0.1:7890指向宿主机上运行的代理软件。 - kind 节点的视角:当容器(Node)尝试访问
127.0.0.1:7890时,它访问的是 容器内部的 Loopback 接口。 - 结果:容器内部根本没有监听 7890 端口的服务,所以报
connection refused。
How
对于 Kind
因此不能在配置里写 127.0.0.1,必须让 kind 节点访问宿主机的 IP。
在 Linux 宿主机上,Docker 默认网桥的网关通常是 172.17.0.1。
修改
/etc/systemd/system/docker.service.d/http-proxy.conf:如果是 containerd,需要修改的文件为
/etc/systemd/system/containerd.service.d/http-proxy.conf1 2 3 4[Service] Environment="HTTP_PROXY=http://172.17.0.1:7890" Environment="HTTPS_PROXY=http://172.17.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.0.0.0/8,192.168.0.0/16,.svc,.cluster.local"代理软件(如 Clash)必须开启 “Allow LAN” (允许局域网连接),否则它会拒绝来自
172.17.x.x这种非本地流量。重启 Docker:
1 2sudo systemctl daemon-reload sudo systemctl restart docker
For Minikube
| |