通过使用VPN,绕过代理,使用Rancher Desktop
2023/06/22 更新:似乎已解决VPN问题。
以下的VPN问题已经解决关闭了。
在Windows(10 Pro 22H2)环境下,我使用以下步骤成功地在nerdctl中运行了容器,即使使用了VPN。
-
- Rancher Desktop v1.9.0 をインストール
-
- Rancher DesktopのGUIからFactory Resetを実施して環境をリセット
- Rancher DesktopのGUIからPreferences > WSL > Proxy にあるようにVPN利用時に使うProxyを設定
尽情享受吧!
以下是當時的新聞報導
在公司的本地环境开发时,遇到的一个问题是代理设置…我在使用Rancher Desktop时也遇到了类似的问题,所以现在我介绍一下解决方法。
如果您在代理环境中有困扰,可能与 Docker Desktop 有关,这可能对您有一些参考价值。
前提 tí) – prerequisite
(Please note that this paraphrase may vary depending on the specific context and intended meaning of “前提”.)
-
- Rancher Desktop 1.1.1
CLIはdockerではなく、nerdctlを利用
確認環境
Ubuntu 20.04.4 LTS
macOS Catalina 10.15.7
目前状况
情况说明
環境变量已经设置了代理。
$ env | grep proxy
https_proxy=http://proxy.example.com:8080
http_proxy=http://proxy.example.com:8080
no_proxy=127.0.0.1,localhost,registry.example.com
客户设置也按照以下方式进行了设置。
$ cat ~/.docker/config.json
{
:
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080/",
"httpsProxy": "http://proxy.example.com:8080/",
"noProxy": "127.0.0.1,localhost,registry.example.com"
}
}
}
尽管应该设置了代理,但这些命令为什么无法正常工作?
?无法登录到注册表中
$ nerdctl login --debug registry.example.com
Enter Username: yassan
Enter Password:
:
FATA[0038] failed to call rh.Client.Do: Get "https://registry.example.com/v2/": dial tcp 203.0.113.23:443: i/o timeout
?无法形象化
$ nerdctl pull --debug registry.example.com/monitoring/base-kafka-aggregator:0.0.1
:
FATA[0030] failed to resolve reference "registry.example.com/monitoring/base-kafka-aggregator:0.0.1": failed to do request: Head "https://registry.example.com/v2/monitoring/base-kafka-aggregator/manifests/0.0.1": dial tcp 203.0.113.23:443: i/o timeout
无法构建形象
$ nerdctl build --debug --namespace k8s.io \
--build-arg http_proxy=http://proxy.example.com:8080 \
--build-arg https_proxy=http://proxy.example.com:8080 \
--build-arg no_proxy=127.0.0.1,localhost,registry.example.com \
-t kafka-access-log:0.0.1 -f docker/kafka-access-log.Dockerfile .
:
error: failed to solve: registry.example.com/monitoring/base-kafka-aggregator:0.0.1: failed to do request: Head "https://registry.example.com/v2/monitoring/base-kafka-aggregator/manifests/0.0.1": dial tcp 203.0.113.23:443: i/o timeout
FATA[0030] unrecognized image format
※203.0.113.23:registry.example.com的IP地址
为什么会出错呢??
无论哪种情况,都会出现 dial tcp 203.0.113.23:443: i/o 超时,并且无法与私有注册表进行通信。这种情况通常是由于代理造成的。
但是,为什么即使存在环境变量和客户端设置的代理配置,也无法正常工作呢?
让我们来看看为什么会出现问题。
(失败要点之一)Rancher Desktop的代理设置点有所不同?
如下图所示,Rancher Desktop使用Lima作为Linux虚拟机(在Windows上使用Hyper-V虚拟机)。
由于这个原因,代理等设置需要在Rancher Desktop的配置中设置,而不是在主机上设置。
从rancherdesktop.io 引用
参考:在阿尔卑斯山的虚拟机/ etc/environment中未设置代理变量 ·问题#1267·农民桌面
在Docker Desktop中,Proxy的设置在GUI的NETWORK资源中可找到,但在目前的Rancher Desktop中并不存在。
因此,我们将按照以下方式进行Proxy的设置。
在退出 Rancher Desktop 之前,请从菜单中选择 “Exit” 以正确停止它,然后按照以下方式创建 override.yaml 文件。
env:
http_proxy: http://proxy.example.com:8080
https_proxy: http://proxy.example.com:8080
-
- Mac: ~/Library/Application Support/rancher-desktop/lima/_config/override.yaml
Ubuntu: ~/.local/share/rancher-desktop/lima/_config/override.yaml
注意,根据前面提到的,Windows在WSL2中使用Hyper-V,因此配置点也有所不同。
尽管未经验证,但以下内容可能会有所帮助(如果可以确认,我将进行补充)。
Rancher在VPN/企业代理下运行不起来·问题#995·rancher-sandbox/rancher-desktop。
(失败点之二)必须将代理设置为VPN的终点才行?(但是,根据环境而异)
实际上,proxy.example.com 是我们公司内部使用的代理服务器,我将其设置为代理。然而,如果您正在使用VPN连接,根据设计,所有网络流量都将通过VPN的终端点(例如,在使用VPN时指定的IP地址或主机,如proxy.pac)进行传输。因此,在代理设置中应该正确地指定VPN的终端点。
根据公司内部政策,需要注意VPN的配置规范是什么。
(失败要点 第三点)不能在no_proxy指定中放入私人注册表等公司内部主机?(但是,这取决于环境)
与第二个案例相同,「如果使用VPN连接,则所有网络流量都会经过VPN的终点」,因此,不要将私有注册表或内部主机添加到no_proxy中,否则将不会通过代理。
由于公司内部的政策决定了用什么样的规格构建VPN,请注意。
填補缺漏
关于登录注册表,使用Docker命令无法避免上述情况。由于我更想使用nerdctl而不是Docker命令,所以我没有深入研究。
最后
不小心搞砸了,浪费了时间,如果我的失误可以让别人少耗费一点时间,那就幸运了。
Rancher Desktop很好用。即使只是使用nerdctl来操作容器,也是可以接受的,而且当在本地使用Kubernetes时,K3s非常轻巧,可以节省PC资源的消耗。