Containerd 如何配置 Proxy?

简介: 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
  1. 在某些企业环境中,需要通过代理访问外部服务

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"
INI

配置后保存重启即可:

systemctl restart containerd.service
BASH

最佳实践: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>"
INI

🎉🎉🎉

总结

Kubernetes 1.20 以上,企业 air gap 场景下可能会需要用到 containerd 配置 Proxy.

本文介绍了其配置方法,以及配置过程中 NO_PROXY 的最佳实践。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9月前
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
1612 1
Nginx、Kong、Apisix、Gateway网关比较
|
Java 开发工具 Docker
最全解决docker配置kibana报错 Kibana server is not ready yet
最全解决docker配置kibana报错 Kibana server is not ready yet
927 0
|
Prometheus Cloud Native 应用服务中间件
nginx 代理 prometheus
nginx 代理 prometheus
271 0
|
4月前
|
Docker 容器
docker nginx-proxy 添加自定义https网站
docker nginx-proxy 添加自定义https网站
63 4
|
6月前
|
Kubernetes 负载均衡 API
在K8S中,kube-proxy iptables 原理是什么?
在K8S中,kube-proxy iptables 原理是什么?
|
6月前
|
Kubernetes API 容器
[kubernetes]安装metrics-server
[kubernetes]安装metrics-server
238 0
|
9月前
|
Kubernetes Linux Docker
如何在Docker和Kubernetes中使用代理IP?
如何在Docker和Kubernetes中使用代理IP?
417 1
|
9月前
|
Kubernetes Ubuntu 搜索推荐
containerd配置HTTP私仓
在240个字符内,以下是摘要: 在Ubuntu 22.04上,配置K8S基础环境后,安装Docker并设置镜像加速,接着部署私有的Harbor仓库(HTTP访问)。要将镜像推送到Harbor,需编辑Docker的`daemon.json`加入不安全注册表,然后重启服务。通过`docker login`、`docker tag`和`docker push`推送到Harbor。此外,配置`containerd`以信任Harbor的HTTP地址,更新`/etc/containerd/certs.d/`,重启服务后,使用`ctr`拉取和推送镜像至Harbor。
containerd配置HTTP私仓
|
9月前
|
应用服务中间件 nginx Docker
docker安装nginx并暴露端口
【1月更文挑战第9天】docker安装nginx并暴露端口
443 0
|
Kubernetes 监控 程序员
kubernetes部署metrics-server
原有的kubernetes容器监控服务heapster,从kubernetes 1.11版本开始逐渐退休,新的监控服务是metrics-server
1183 0
kubernetes部署metrics-server