[containerd] 配置containerd使用proxy来pull image

在使用containerd作为container runtime的k8s v1.20环境中,因网络限制需配置HTTPS_PROXY和NO_PROXY以顺利pull image。此外,为解决自建私有registry问题,需修改containerd的config.toml文件,将docker.io指向自建registry。同时,当为containerd配置代理后,可能影响到calico-kube-controllers,需在NO_PROXY中添加api server的service ip以避免问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在捣鼓k8s v1.20,使用containerd作为container runtime,但是在执行kubeadm config images pull的时候报错。因为在公司环境下,需要配置代理。

mkdir /etc/systemd/system/containerd.service.d
cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/"
> EOF

HTTPS_PROXY或NO_PROXY可以按需添加。最后记得重新加载service

systemctl daemon-reload
systemctl restart containerd

2021-01-28更新

1. 由于docker.io对匿名和普通账号的pull reuqest进行了限制,如果有自建的私有registry,可以将containerd默认的docker.io 指向自建registry

编辑 /etc/containerd/config.toml 文件,修改以下配置

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://<your_registry>"]

2. 由于之前给containerd配置了代理,导致在安装calico的时候,calico-kube-controllers一直卡在ContainerCreating状态。检查pod状态,有以下Events

 Warning  FailedCreatePodSandBox  9m37s                   kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "8b3342e30aeea4a1e12f3f19c001b8d52a52ce8b3624476dd40576ad302334ea": error getting ClusterInformation: Get "https://[IP]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": unexpected EOF

因此需要在NO_PROXY中添加api server的service ip.

cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/" "NO_PROXY=<SERVICE_IP>"
> EOF

 

### 如何在 Containerd配置 HTTP/HTTPS 代理 为了确保容器化应用能够通过企业防火墙访问外部资源,通常需要为 containerd 配置 HTTP 和 HTTPS 代理。以下是具体方法: #### 方法一:通过 systemd 设置环境变量 可以通过修改 `containerd` 的 systemd 单元文件来设置全局的 HTTP 和 HTTPS 代理。 创建或编辑 `/etc/systemd/system/containerd.service.d/http-proxy.conf` 文件,添加以下内容[^3]: ```ini [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.1,.example.com,192.168.0.0/16" ``` 此配置指定了 HTTP 和 HTTPS 请求应经过哪个代理服务器,并列出了不需要代理的情况下的地址列表。对于内部网络 CIDR 或 Kubernetes 服务名称等特定情况,应该将其加入到 `NO_PROXY` 列表中以防止不必要的代理转发[^2]。 完成上述更改之后,记得执行命令刷新守护进程并重启 service 来使新设置生效: ```bash sudo systemctl daemon-reload sudo systemctl restart containerd ``` #### 方法二:直接修改 containerd 配置文件 另一种方式是在 containerd 自身的配置文件里指定代理参数。这一般位于 `/etc/containerd/config.toml` 下面。找到 `[plugins."io.containerd.grpc.v1.cri".registry]` 节点,按照下面的例子调整[^4]: ```toml [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d" [proxy_env.http_proxy] value = "http://your-http-proxy-url/" [proxy_env.https_proxy] value = "http://your-https-proxy-url/" [proxy_env.no_proxy] value = "localhost,127.0.0.1,.example.com,192.168.0.0/16" ``` 请注意替换示例中的占位符 URL 地址为你实际使用的代理服务器地址以及相应的免代理 IP/CIDRs 及域名。 最后一步同样是要重新加载 configuration 并启动 service 才能应用新的设定: ```bash sudo systemctl reload containerd ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值