国内环境WSL2在http代理下运行minikube

因为国内环境下无法访问k8s.gcr.io,因而需要设置代理来访问。如果没有正确设置好,在运行minikube start后会显示以下警告:

? This container is having trouble accessing https://k8s.gcr.io

说明这个容器不能正常访问到k8s.gcr.io去拉取镜像
参照https://minikube.sigs.k8s.io/... 正确配置的方法为:
export HTTP_PROXY=http://export HTTPS_PROXY=https://【国内环境WSL2在http代理下运行minikube】export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,192.168.49/24minikube start

(官方文档漏掉了192.168.49/24)
问题就在于怎么让minikube连上windows的梯子。
假设我们在windows打开了一个允许来自局域网连接的HTTP代理服务,端口为10809。
那么为WSL2配置代理时,我们首先要知道WSL2下,windows的IP地址,则需要运行
cat /etc/resolv.conf

其中显示的nameserver则为WSL2连接到windows的IP地址,假设值为172.80.18.1 因此我们可以为WSL2设置梯子:
export HTTP_PROXY=http://172.80.18.1:10809 export HTTPS_PROXY=http://172.80.18.1:10809

这样我们就能在WSL2中使用到代理服务访问外网
!但是这样也无法让minikube连接到外网。
因为minikube是运行在docker desktop中的,不能直接使用到WSL2的网络(有误请指正)。而我们在开启WSL2中运行minikube的时候,minikube的系统会使用WSL2的网络环境变量(HTTP_PROXY, HTTPS_PROXY, NO_PROXY)作为minikube的环境变量。因此,正确的填写方式是:
export HTTP_PROXY=http://host.docker.internal:10809 export HTTPS_PROXY=http://host.docker.internal:10809 export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,192.168.49/24minikube start

其中host.docker.internal在容器中会被容器的DNS服务解析为宿主的IP地址,也就是容器与windows通信的IP地址,类似WSL2与windows通信的IP地址。
这样设置,minikube就能使用到系统代理。

    推荐阅读