共计 1704 个字符,预计需要花费 5 分钟才能阅读完成。
前言
在某些 air gap 场景中,往往须要离线或应用代理 (Proxy), 例如:
-
须要通过 Proxy pull 容器镜像:
- Docker Hub:
docker.io
- Quay:
quay.io
- GCR:
gcr.io
- GitHub 镜像库:
ghcr.io
- Docker Hub:
- 在某些企业环境中,须要通过代理拜访内部服务
Docker 如何配置代理想必大家都很分明,然而自从 Kubernetes 1.20 版本当前开始弃用 Docker, containerd 逐步成为支流 CRI.
所以咱们上面介绍一下如何配置 contaienrd 的 Proxy.
📝Notes:
还有一种场景须要 containerd 配置 proxy, 就是将 Dragonfly 和 containerd 联合应用 的时候。
Containerd 配置 Proxy 步骤
这里以通过 systemd 装置的 containerd 为例。
containerd 的配置个别位于 /etc/containerd/config.toml
下,service 文件位于:/etc/systemd/system/containerd.service
配置 Proxy 能够通过 service 环境变量形式配置,具体如下:
创立或编辑文件:/etc/systemd/system/containerd.service.d/http-proxy.conf
内容如下:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost"
配置后保留重启即可:
systemctl restart containerd.service
最佳实际: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
最终配置如下:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,.ewhisper.cn,<nodeCIDR>,<APIServerInternalURL>,<serviceNetworkCIDRs>,<etcdDiscoveryDomain>,<clusterNetworkCIDRs>,<platformSpecific>,<REST_OF_CUSTOM_EXCEPTIONS>"
🎉🎉🎉
总结
Kubernetes 1.20 以上,企业 air gap 场景下可能会须要用到 containerd 配置 Proxy.
本文介绍了其配置办法,以及配置过程中 NO_PROXY
的最佳实际。
正文完