背景:最近在学习k8s,需要从docker官网上下载镜像,国内的镜像找的比较费劲,不如直接配好网络,一劳永逸。具体配置主要分为三个步骤,设置主机上的vpn配置,配置虚拟机的代理网络、配置docker的代理网络。
首先介绍下我的基础配置,我的机器是mac上装的vm虚拟机,centos8,mac安装了VPN,网络配置如下:
下面进入具体的配置。
一、修改 VPN 的配置
1、查看本机的内网IP地址,输入命令,找到inet后面的地址。
lien@liendeMacBook-Pro ~: ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether c0:89:f3:cf:7c:21
inet6 fe80::14f:f3f:12da:7f5%en0 prefixlen 64 secured scopeid 0xf
inet 192.168.1.107 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
得到主机的 ip地址为:192.168.1.107
2、找到vpn 监听的端口,有两个,再看配置文件。
lsof -nP -iTCP -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ControlCe 500 lien 5u IPv4 0xef599c6a9f1d0653 0t0 TCP *:7000 (LISTEN)
ControlCe 500 lien 6u IPv6 0xef599c6aa040ba33 0t0 TCP *:7000 (LISTEN)
ControlCe 500 lien 7u IPv4 0xef599c6a9f1d11b3 0t0 TCP *:5000 (LISTEN)
ControlCe 500 lien 8u IPv6 0xef599c6aa040ca33 0t0 TCP *:5000 (LISTEN)
rapportd 538 lien 9u IPv4 0xef599c6a9d75e873 0t0 TCP *:52999 (LISTEN)
rapportd 538 lien 14u IPv6 0xef599c6aa0403233 0t0 TCP *:52999 (LISTEN)
ApifoxApp 666 lien 10u IPv4 0xef599c6a9f1d33d3 0t0 TCP 127.0.0.1:42950 (LISTEN)
com.docke 18177 lien 166u IPv6 0xef599c6aa0408a33 0t0 TCP *:3309 (LISTEN)
clash-dar 19311 lien 7u IPv4 0xef599c6a9dc88653 0t0 TCP 127.0.0.1:17890 (LISTEN)
clash-dar 19311 lien 11u IPv4 0xef599c6a991d33d3 0t0 TCP 127.0.0.1:8765 (LISTEN)
3、打开VPN的配置软件,open /Applications/claoud.app/Contents/Resources/clash/config.yaml,可以看到主要有以下的信息。大家各自的地址可能不一样,需要找一下,并进行下面的操作。
mixed-port: 17890
external-controller: 127.0.0.1:8765
allow-lan: false
mode: Global
log-level: info
需要操作👇
# 添加,让代理绑定所有的网络接口,之前仅支持本地的接口
bind-address: 0.0.0.0
# 修改,让局域网中的设备也能访问代理服务
allow-lan: true
4、在主机上测试上面找到的主机内网ip地址和代理的端口是不是正确,如果可以请求通表示可以使用这个地址和端口进行代理配置。
curl -x http://192.168.1.107:17890 https://www.google.com
二、虚拟机代理网络配置
1、在文件末尾添加以下内容(Mac 主机的 IP 是 192.168.1.107,代理端口是 17890):
cat <<EOF >> /etc/profile
export http_proxy=http://192.168.1.107:17890
export https_proxy=http://192.168.1.107:17890
export no_proxy=localhost,127.0.0.1
EOF
# 保存并退出,然后使配置生效
source /etc/profile
2、在虚拟机上测试,能访问通代表设置成功。
curl https://www.google.com
3、这么设置以后发现,kubectl 命令不好用了,原因是设置了代理,导致 kubectl 的命令被代理了。
export http_proxy=http://192.168.1.107:17890
export https_proxy=http://192.168.1.107:17890
export no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,172.16.165.129
4、查看代理环境是否生效。
env | grep -i proxy
以上表示虚拟机目前有访问docker官网的能力了,但是之前在下载的时候,会一直提示io 超时的错误,经过查阅资料,发现使用 docker pull 命令下载镜像的时候,这个命令不会走代理网络,所以需要进一步对 docker的网络进行设置。
三、设置 docker 代理
1、直接执行下面的命令。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.1.107:17890"
Environment="HTTPS_PROXY=http://192.168.1.107:17890"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -i proxy # 确保代理配置生效
2、成果检验,可以看到可以直接从 docker 官方上拉镜像了,成功!
可能会遇到这种情况,网络原因,需要多 pull 几次就好了。
[root@node1 master]# docker pull registry.k8s.io/ingress-nginx/controller:v1.5.1
Error response from daemon: Head https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/ingress-nginx/controller/manifests/v1.5.1: EOF
[root@node1 master]# docker pull registry.k8s.io/ingress-nginx/controller:v1.5.1
v1.5.1: Pulling from ingress-nginx/controller
9b18e9b68314: Pull complete
a1b8baad86b5: Downloading [=========================================> ] 33.63MB/40.49MB
b69a07a133a8: Download complete
c6ee59204c68: Downloading [==========================================> ] 18.08MB/21.53MB
四、结语
通过以上配置就可以实现虚拟机共用主机上的VPN网络,如果还有什么疑问,大家可以一起探讨。