Kind与MiniKube配置代理

What

使用 kind 在本地运行集群时,拉取镜像总是有这样的报错:

1
spec.containers{nginx}: Failed to pull image "nginx:alpine": failed to pull and unpack image "docker.io/library/nginx:alpine": failed to resolve reference "docker.io/library/nginx:alpine": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/alpine ": proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused

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

  1. 修改 /etc/systemd/system/docker.service.d/http-proxy.conf

    如果是 containerd,需要修改的文件为 /etc/systemd/system/containerd.service.d/http-proxy.conf

    1
    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"
    
  2. 代理软件(如 Clash)必须开启 “Allow LAN” (允许局域网连接),否则它会拒绝来自 172.17.x.x 这种非本地流量。

  3. 重启 Docker:

    1
    2
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

For Minikube

1
2
3
minikube start --docker-env http_proxy=http://172.17.0.1:7890 \
               --docker-env https_proxy=http://172.17.0.1:7890 \
               --docker-env no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16
Licensed under CC BY-NC-SA 4.0
最后更新于 2026年3月9日星期一
使用 Hugo 构建
主题 StackJimmy 设计