如何快速给容器运行时 Containerd 配置一个代理服务器

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

93bdabb1ce0292b24b3639035e27dae0.jpeg

前言

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

1.需要通过 Proxy pull 容器镜像:1.Docker Hub: docker.io2.Quay: quay.io3.GCR: gcr.io4.GitHub 镜像库:ghcr.io2.在某些企业环境中,需要通过代理访问外部服务

Docker 如何配置代理想必大家都很清楚,但是自从 Kubernetes 1.20 版本以后开始弃用 Docker[1], containerd 逐渐成为主流 CRI. 所以我们下面介绍一下如何配置 contaienrd 的 Proxy.

📝Notes:

还有一种场景需要 containerd 配置 proxy, 就是将 Dragonfly 和 containerd 结合使用[2] 的时候。

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.本地地址和网段:localhost 和 127.0.0.1 或 127.0.0.0/82.Kubernetes 的默认域名后缀:.svc 和 .cluster.local3.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/82.172.16.0.0/123.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 的最佳实践。

References

[1] Kubernetes 1.20 版本以后开始弃用 Docker: https://ewhisper.cn/posts/36509/
[2] Dragonfly 和 containerd 结合使用: https://d7y.io/docs/setup/runtime/containerd/proxy/

本文转载自:「东风微鸣技术博客」,原文:https://url.hi-linux.com/2xDJ8,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

1743f1413c6e0577aa2e64bf954e3283.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

ac750275a07b62c19492efa78cf5f95e.png

你可能还喜欢

点击下方图片即可阅读

eacb1671c4134d8c1c86ef012c4999df.jpeg

Phantun: 一款突破运营商 QoS 封锁的高性能 UDP 流量伪装工具,支持 WireGuard 协议

5a083726aa79ff7177b92bde5eae6f88.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

036cad4417266bd9aa5f1b8f8f09ac28.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 通过containerd API或CLI,可以使用以下步骤配置containerd管理容器: 1. 安装containerd; 2. 通过配置文件配置containerd服务; 3. 使用containerd API或CLI操作命令管理容器,如创建、启动、停止等。 更详细的配置方法请参考containerd文档。 ### 回答2: 通过containerd API或CLI,可以通过以下步骤配置和管理容器: 1. 安装containerd:首先需要安装containerd并启动守护进程。 2. 创建镜像:使用containerd API或CLI,可以从远程仓库或本地构建一个容器镜像。通过指定镜像的名称和标签,可以在本地保存镜像。 3. 创建容器:使用containerd API或CLI,可以创建一个新的容器。需要指定容器的名称、所使用的镜像、挂载点、网络设置、环境变量等信息。创建容器后,可以对其进行配置和管理。 4. 查看容器状态:使用containerd的状态查询API或CLI命令,可以获取容器的详细信息,包括容器的ID、状态、挂载点、网络设置等。 5. 启动和停止容器:使用containerd API或CLI,可以启动或停止已创建的容器。启动容器后,它将在后台运行。停止容器时,可以选择立即停止或优雅地关闭容器。 6. 调整容器资源:使用containerd的资源管理API或CLI命令,可以调整容器的CPU、内存、磁盘等资源。可以根据容器的需求增加或减少资源的分配。 7. 日志和监控:containerd API和CLI提供了获取和监控容器的日志和性能指标的功能。可以查看容器的日志、CPU使用率、内存使用情况等,以便及时调整容器配置。 通过以上步骤,可以使用containerd API或CLI对容器进行配置和管理,实现容器的创建、启动、停止、资源调整等操作。这些功能提供了一个灵活和可扩展的方式来管理容器,使其适应不同应用场景的需求。 ### 回答3: 通过containerd API或CLI,可以使用以下步骤来配置和管理容器: 1. 安装containerd:首先,需要安装并配置containerd。可以通过在操作系统上运行适当的命令来安装containerd,如 `sudo apt-get install containerd` 或 `yum install containerd`。 2. 配置containerd:安装完成后,需要进行一些基本配置。可以通过修改 `/etc/containerd/config.toml` 文件来配置containerd。例如,可以设置默认的运行时容器存储位置,以及网络配置等。 3. 启动containerd配置完成后,可以使用适当的命令来启动containerd。例如,可以运行 `sudo systemctl start containerd` 命令来启动containerd服务。 4. 创建容器:使用containerd API或CLI,可以创建容器。可以通过指定容器的名称、图像、命令等来创建容器。例如,可以使用CLI命令 `containerd ctr run -d <镜像名称> <容器名称> <命令>` 来创建容器。 5. 管理容器:一旦容器创建完成,可以使用containerd API或CLI来管理容器。可以使用容器的ID或名称来执行各种操作,如启动容器、停止容器、重启容器、查看容器状态等。 6. 删除容器:如果不再需要某个容器,可以使用containerd API或CLI来删除容器。例如,可以使用CLI命令 `containerd ctr task kill -s KILL <容器ID>` 来立即终止容器。 通过以上步骤,可以使用containerd API或CLI来配置和管理容器。注意,具体的命令和操作可能会因为操作系统的不同而有所差异,可以根据实际情况进行调整和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值