首页 / 常见问题 / 如何在 Contarinerd 为运行时的集群上,拉取使用 HTTP 协议部署的镜像仓库中的镜像?

如何在 Contarinerd 为运行时的集群上,拉取使用 HTTP 协议部署的镜像仓库中的镜像?

场景描述

在使用 Contarinerd 为运行时的集群上,默认设置不允许拉取使用 HTTP 协议部署的镜像仓库中的镜像,若有相关需求,可参考如下方法配置。

解决方法

  1. 在使用 Contarinerd 为运行时的集群上,登录需要拉取镜像的节点。

  2. (可选)若您的镜像仓库需要认证,请使用 Basic Auth 方式加密账号密码,命令格式如下 :

    echo -n  <username>:<password>|base64

    命令示例:

    echo -n root:123456|base64

    输出示例:

    cm9vdDoxMjM0NTY=
  3. 修改配置文件,执行命令 vim /etc/containerd/config.toml,并根据以下配置样例修改相应字段,修改项参数格式如下:

    ···
    [plugins]
      [plugins."io.containerd.grpc.v1.cri"]
        [plugins."io.containerd.grpc.v1.cri".registry]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
            [plugins."io.containerd.grpc.v1.cri".registry.mirrors."<镜像仓库服务地址>"]
              endpoint = ["http://<镜像仓库服务地址>"]
          [plugins."io.containerd.grpc.v1.cri".registry.configs]
            [plugins."io.containerd.grpc.v1.cri".registry.configs."<镜像仓库服务地址>".auth]
              auth = "<Basic Auth 方式加密的账号密码>"
            [plugins."io.containerd.grpc.v1.cri".registry.configs."<镜像仓库服务地址>".tls]
              insecure_skip_verify = true  # 添加跳过证书认证的配置项
    ···
    参数 描述
    <镜像仓库服务地址> 填写需要信任的 HTTP 服务镜像仓库地址。例如:registry.xxx.cn:60080
    auth 填写上一步中使用 Basic Auth 方式加密账号密码,即终端中输出的值,例如:cm9vdDoxMjM0NTY=
    insecure_skip_verify 对于使用 HTTP 服务镜像仓库跳过证书验证,须设置为:insecure_skip_verify = true

    修改示例:

    ···
    [plugins]
      [plugins."io.containerd.grpc.v1.cri"]
        [plugins."io.containerd.grpc.v1.cri".registry]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
            [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.xxx.cn:60080"]
              endpoint = ["http://registry.xxx.cn:60080"]
          [plugins."io.containerd.grpc.v1.cri".registry.configs]
            [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.xxx.cn:60080".auth]
              auth = "cm9vdDoxMjM0NTY="
            [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.xxx.cn:60080".tls]
              insecure_skip_verify = true
    ···
  4. 执行以下命令重启 Containerd。

    systemctl restart containerd
  5. 至此配置完成,您可以使用镜像拉取命令拉取镜像了,例如:

    crictl pull harbor.xxx.cn/demo/alpine:latest