containerd V1.x

containerd

v1.7.5

harbor

v2.14.1

修改/etc/containerd/config.toml配置文件

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        # 如下这些仓库可以作为公共仓库使用
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
            endpoint = ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
            endpoint = ["https://gcr.mirrors.ustc.edu.cn"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
            endpoint = ["https://gcr.mirrors.ustc.edu.cn/google-containers/"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
            endpoint = ["https://quay.mirrors.ustc.edu.cn"]
        # 内部私有仓库配置
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."www.myharbor.com"]
            endpoint = ["https://www.myharbor.com/"]

      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        # 内部私有仓库认证信息
        [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com"] # 这行不确定要不要写上
          [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com".tls]
            insecure_skip_verify = false # 是否跳过证书认证
            ca_file = "/etc/containerd/www.myharbor.com/ca.crt" # CA 证书 
          [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com".auth]
            username = "test" # 在harbor里单独创建的用户,授权访问指定项目
            password = "Test123456"

如果镜像仓库配置了双向认证,那么需要为 containerd 配置 ssl 证书用于 镜像仓库对 containerd 做认证。

      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        # 内部私有仓库认证信息
        [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com"] # 这行不确定要不要写上
          [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com".tls]
            insecure_skip_verify = false # 是否跳过证书认证
            ca_file = "/etc/containerd/www.myharbor.com/ca.crt" # CA 证书
            cert_file = "/etc/containerd/www.myharbor.com/www.myharbor.com.crt" # harbor 证书
            key_file = "/etc/containerd/www.myharbor.com/www.myharbor.com.key" # harbor 私钥 
          [plugins."io.containerd.grpc.v1.cri".registry.configs."www.myharbor.com".auth]
            username = "test" # 在harbor里单独创建的用户,授权访问指定项目
            password = "Test123456

Containerd 与 docker 都有默认仓库,均为 docker.io 。如果配置中未指定 mirror 为 docker.io,containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint(默认为 https://registry-1.docker.io ) ,而 docker 无法修改。

Docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认的镜像仓库。

Containerd 目前没有直接配置镜像加速的功能,但 containerd 中可以修改 docker.io 对应的 endpoint,所以可以通过修改 endpoint 来实现镜像加速下载。因为 endpoint 是轮询访问,所以可以给 docker.io 配置多个仓库地址来实现 加速地址+默认仓库地址。

如上就是上文配置那些公共仓库的缘由。

containerd V2.x

containerd 2.x版本所有镜像仓库配置都在/etc/containerd/certs.d/目录下

配置结构:

  • 一个 registry 域名 = 一个目录

  • 一个目录 = 一个 hosts.toml

  • 在 hosts.toml 中定义:server、认证信息、是否跳过认证

先看看是不是2.x版本

[root@k8s-master ~]# containerd --version
containerd containerd.io v2.2.0 1c4457e00facac03ce1d75f7b6777a7a851e5c41

创建目录

mkdir -p /etc/containerd/certs.d/harbor.liyb.com

目录名必须和镜像中使用的 registry 完全一致,没使用域名,也可以直接使用IP地址作为目录

创建Hosts.toml文件

vi /etc/containerd/certs.d/harbor.liyb.com/hosts.toml

添加下面内容:

server = "https://harbor.liyb.com"

[host."https://harbor.liyb.com"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true

  [host."https://harbor.liyb.com".auth]
    username = "admin"
    password = "Harbor12345"

因为我这是自签名证书,我跳过验证,如果你是企业证书,不用设置跳过,将CA证书添加到/etc/containerd/certs.d/harbor.liyb.com/目录下面即可。

需要去主配置文件config.toml确认config_path位置

# /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"

containerd 2.x 默认开启,但生产环境务必检查

验证

Kubernetes 节点

crictl pull harbor.liyb.com/prod/nginx:1.27

镜像名必须显式包含 registry 地址

注意事项

  • hosts.toml 不生效 → 目录名写错(域名 / 端口不一致)

  • HTTP 仓库拉不下来 → 忘了写 http://

  • K8s Pod 拉不到镜像 → image 没写 registry

  • 误以为 daemon.json 生效 → containerd 不读 Docker 配置

参考文章链接:

https://www.cnblogs.com/hahaha111122222/p/16419768.html

https://mp.weixin.qq.com/s/oHmCQ-Og0irAg3yCUAj6pg