乐趣区

关于容器:Containerd-如何配置-Proxy

前言

在某些 air gap 场景中,往往须要离线或应用代理 (Proxy), 例如:

  1. 须要通过 Proxy pull 容器镜像:

    1. Docker Hub: docker.io
    2. Quay: quay.io
    3. GCR: gcr.io
    4. GitHub 镜像库:ghcr.io
  2. 在某些企业环境中,须要通过代理拜访内部服务

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 配置:

  1. 本地地址和网段:localhost127.0.0.1127.0.0.0/8
  2. Kubernetes 的默认域名后缀:.svc.cluster.local
  3. Kubernetes Node 的网段甚至所有应该不必 proxy 拜访的 node 网段:<nodeCIDR>
  4. APIServer 的外部 URL: <APIServerInternalURL>
  5. Service Network: <serviceNetworkCIDRs>
  6. (如有)etcd 的 Discovery Domain: <etcdDiscoveryDomain>
  7. Cluster Network: <clusterNetworkCIDRs>
  8. 其余特定平台相干网段(如 DevOps, Git/ 制品仓库。..): <platformSpecific>
  9. 其余特定 NO_PROXY 网段:<REST_OF_CUSTOM_EXCEPTIONS>
  10. 罕用内网网段:

    1. 10.0.0.0/8
    2. 172.16.0.0/12
    3. 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 的最佳实际。

退出移动版