如何在 Contarinerd 为运行时的集群上,拉取使用 HTTP 协议部署的镜像仓库中的镜像?
场景描述
在使用 Contarinerd 为运行时的集群上,默认设置不允许拉取使用 HTTP 协议部署的镜像仓库中的镜像,若有相关需求,可参考如下方法配置。
解决方法
-
在使用 Contarinerd 为运行时的集群上,登录需要拉取镜像的节点。
-
(可选)若您的镜像仓库需要认证,请使用 Basic Auth 方式加密账号密码,命令格式如下 :
echo -n <username>:<password>|base64
命令示例:
echo -n root:123456|base64
输出示例:
cm9vdDoxMjM0NTY=
-
修改配置文件,执行命令
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 ···
-
执行以下命令重启 Containerd。
systemctl restart containerd
-
至此配置完成,您可以使用镜像拉取命令拉取镜像了,例如:
crictl pull harbor.xxx.cn/demo/alpine:latest