跳转至

K8s下的containerd设置代理

方法一: 通过 Systemd 环境变量配置全局代理

这是最简单直接的方式,适用于所有通过 containerd 拉取的镜像。

  1. 创建 Systemd 代理配置文件

    复制
    sudo mkdir -p /etc/systemd/system/containerd.service.d
    sudo tee /etc/systemd/system/containerd.service.d/http-proxy.conf <<EOF
    [Service]
    Environment="HTTP_PROXY=http://<代理IP>:<代理端口>"
    Environment="HTTPS_PROXY=http://<代理IP>:<代理端口>"
    Environment="NO_PROXY=localhost,127.0.0.1,<内网网段或域名>"
    EOF
    

    替换 <代理IP>:<代理端口> 为实际代理地址(如 http://10.10.1.1:8080)。 NO_PROXY 填写不需要代理的地址(如 Kubernetes 节点 IP、Service CIDR、Pod CIDR 等)。

  2. 重新加载 Systemd 并重启 Containerd

    sudo systemctl daemon-reload
    sudo systemctl restart containerd
    

  3. 验证代理是否生效

    sudo ctr images pull docker.io/library/nginx:latest
    
    观察拉取过程是否通过代理完成。

方法二: 配置镜像仓库代理镜像(Registry Mirror)

如果代理仅针对特定镜像仓库(如 Docker Hub),可以通过 config.toml 配置镜像加速器或代理镜像。

  1. 编辑 Containerd 配置文件

    sudo vim /etc/containerd/config.toml
    
    2. 添加镜像仓库代理配置 在 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 部分添加代理镜像地址(例如阿里云镜像加速器):
    复制
    [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://<镜像加速器地址>"]
    
    示例(阿里云镜像加速器):
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]
    
    3. 重启 Containerd
    sudo systemctl restart containerd
    

    方法三: 高级配置(自定义 TLS 或认证)

    如果代理需要 TLS 证书或认证,需在 /etc/containerd/certs.d 目录下配置 hosts.toml。

  2. 创建证书目录

    sudo mkdir -p /etc/containerd/certs.d/docker.io
    

  3. 配置 hosts.toml
    sudo tee /etc/containerd/certs.d/docker.io/hosts.toml <<EOF
    [host."https://<代理镜像地址>"]
      capabilities = ["pull", "resolve"]
      ca = "/etc/ssl/certs/ca-certificates.crt"  # 代理的 CA 证书路径
      skip_verify = false  # 是否跳过证书验证(不安全,慎用)
    EOF
    
  4. 重启 Containerd
    sudo systemctl restart containerd
    
  5. 验证配置
    # 查看 Containerd 日志
    sudo journalctl -u containerd -f
    # 拉取镜像测试
    sudo ctr images pull docker.io/library/nginx:latest