拉取镜像代理
2024..7.18 更新
⚠️
由于众所周知的原因, docker.io 被墙了。因此配置代理乃是重中之重的工作
预制条件:首先需要一个有源的 ClashX
本文有参考 https://juejin.cn/post/7166794699586404388 (opens in a new tab) 以及 docker和containerd增加代理 (opens in a new tab)
前提说明
在某些场景中,往往需要离线或使用代理 (Proxy), 例如:
需要通过 Proxy pull 容器镜像:
- Docker Hub:
docker.io
- Quay:
quay.io
- GCR:
gcr.io
- GitHub 镜像库:
ghcr.io
在某些企业环境中,需要通过代理访问外部服务
Docker 配置代理
# 创建docker.service.d目录
mkdir -p /etc/systemd/system/docker.service.d
# 创建HTTP&HTTPS代理文件
# 192.168.88.15 请替换为你的局域网代理 IP 或者 本机 127.0.0.1
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<-EOF
[Service]
Environment="HTTP_PROXY=socks5://192.168.88.15:7890" #代理服务器地址
Environment="HTTPS_PROXY=socks5://192.168.88.15:7890" #https
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,registry.cn-hongkong.aliyuncs.com,.svc,.cluster.local,<nodeCIDR>,<APIServerInternalURL>,<serviceNetworkCIDRs>,<etcdDiscoveryDomain>,<clusterNetworkCIDRs>,<platformSpecific>,<REST_OF_CUSTOM_EXCEPTIONS>" #哪些地址不需要走代理
EOF
# 重启dockerd
systemctl daemon-reload
systemctl restart docker
Containerd 配置代理
# 创建 containerd.service.d 目录
mkdir /etc/systemd/system/containerd.service.d/
# 创建或编辑文件
# 创建HTTP&HTTPS代理文件
# 192.168.88.15 请替换为你的局域网代理 IP 或者 本机 127.0.0.1
cat > /etc/systemd/system/containerd.service.d/http-proxy.conf <<-EOF
[Service]
Environment="HTTP_PROXY=socks5://192.168.88.15:7890" #代理服务器地址
Environment="HTTPS_PROXY=socks5://192.168.88.15:7890" #https
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,registry.cn-hongkong.aliyuncs.com,.svc,.cluster.local,<nodeCIDR>,<APIServerInternalURL>,<serviceNetworkCIDRs>,<etcdDiscoveryDomain>,<clusterNetworkCIDRs>,<platformSpecific>,<REST_OF_CUSTOM_EXCEPTIONS>" #哪些地址不需要走代理
EOF
# 重启containerd
systemctl daemon-reload
systemctl restart containerd
关于 NO_PROXY 忽略代理的配置说明
最佳实践:Proxy 中 NO_PROXY 的推荐配置 在配置 Proxy 时要特别注意,哪些要走 Proxy, 哪些不走 Proxy 要非常明确,避免出现网络访问异常甚至业务异常。 这里有个推荐 NO_PROXY 配置:
- 本地地址和网段:
localhost
和127.0.0.1
或127.0.0.0/8
- Kubernetes 的默认域名后缀:
.svc
和.cluster.local
- Kubernetes Node 的网段甚至所有应该不用 proxy 访问的 node 网段:
<nodeCIDR>
- APIServer 的内部 URL:
<APIServerInternalURL>
- Service Network:
<serviceNetworkCIDRs>
- etcd 的 Discovery Domain:
<etcdDiscoveryDomain>
- Cluster Network:
<clusterNetworkCIDRs>
- 其他特定平台相关网段(如 DevOps, Git/制品仓库。..):
<platformSpecific>
- 其他特定 NO_PROXY 网段:
<REST_OF_CUSTOM_EXCEPTIONS>
- 常用内网网段:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
拉取镜像测试
crictl pull docker.io/library/redis
crictl pull docker.io/library/nginx:alpine
crictl pull docker.io/library/mysql