如何信任非安全镜像仓库?
问题描述
提供平台组件镜像的镜像仓库可能未提供 HTTPS 服务,或没有提供由公共认证机构认证的合法 TLS 证书。您若信任该镜像仓库,请参考以下操作步骤配置容器运行时。
信任非安全镜像仓库配置
根据您所使用的容器运行时,配置镜像仓库信任的步骤也有不同。文档支持 docker 和 containerd 两种容器进行时。
Docker 运行时
操作步骤
-
在被接入集群的 所有节点 上分别执行以下命令:
- 备份 docker 配置文件。
mkdir -p '/var/backup-docker-confs/' if ! [ -f /etc/docker/daemon.json ]; then echo '找不到 docker 配置文件,请检查 docker 是否正确安装。如果仍然不能排障,可申请技术支持。' exit 1 else cp /etc/docker/daemon.json "/var/backup-docker-confs/daemon.json_$(date -u +%F_%R)" fi- 修改
/etc/docker/daemon.json文件。
确保文件中存在
insecure-registries参数,并添加第一步中获取的 镜像仓库地址。 以配置多个镜像地址的场景为例,参考配置如下:{ "insecure-registries": [ "<镜像仓库地址>", "192.168.134.43" ], "registry-mirrors": ["https://6telrzl8.mirror.aliyuncs.com"], "log-opts": { "max-size": "100m", "max-file": "2" }, "live-restore": true, "metrics-addr": "0.0.0.0:9323", "experimental": true, "storage-driver": "overlay2" } -
(可选)使用 jq 命令检查 Docker 配置文件语法。
提示:请确保主机上已安装 jq,可参考命令:
yum install jq -y。jq . < /etc/docker/daemon.json -
重启所有节点 Docker 服务。
systemctl daemon-reload systemctl restart docker
Containerd 运行时
注意:
-
目前所有需要使用镜像的主机节点和后续新增的主机节点,都需修改配置并重启 Containerd 服务。
-
Containerd v1.4、v1.5、v1.6 版本修改非安全镜像仓库配置方法略有不同,请根据实际版本进行配置。
-
在被接入集群的 所有节点 上分别执行以下命令:
- 备份配置文件
mkdir -p '/var/backup-containerd-confs/' if ! [ -f /etc/containerd/config.toml ]; then echo '找不到 containerd 配置文件,请检查 containerd 是否正确安装。如果仍然不能排障,可申请技术支持。' exit 1 else cp /etc/containerd/config.toml /var/backup-containerd-confs/config.toml_$(date +%F_%T) fi- 获取 Containerd 容器运行时版本
# 获取环境上 containerd 的版本 # 请比较该版本号是否小于 v1.6,并在接下来的文档中选择合适的步骤操作 ctr --version | grep -Eo 'v[0-9]+\.[0-9]+\.[0-9]+'
Containerd v1.4 v1.5 非安全镜像仓库配置
-
在被接入集群的 所有节点 上分别执行以下命令:
- 修改
/etc/containerd/config.toml配置文件
# 以下为需要添加到配置文件中的内容示例 # 方括号括起来的行称为节点,在添加以下内容到配置文件时,请注意检查配置文件中是否有同名的节点 # 若已经存在同名的节点,请将节点下的内容进行合并 [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] # 该配置下写多个仓库地址的endpoint [plugins."io.containerd.grpc.v1.cri".registry.mirrors."<镜像仓库地址>"] endpoint = ["https://<镜像仓库地址>", "http://<镜像仓库地址>"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.134.43"] endpoint = ["https://192.168.134.43", "http://192.168.134.43"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."<镜像仓库地址>".tls] insecure_skip_verify = true [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.134.43".tls] insecure_skip_verify = true- 重启 Containerd 服务。
systemctl daemon-reload && systemctl restart containerd - 修改
Containerd v1.6 非安全镜像仓库配置
-
在被接入集群的 所有节点 上分别执行以下命令:
- 判断配置文件中是否存在
config_path字段。
if ! grep -qF 'config_path' /etc/containerd/config.toml; then if grep -qE '\[plugins."io.containerd.grpc.v1.cri".registry.(mirrors|configs)(\.|\])' /etc/containerconfig.toml; then echo '请按照“Containerd v1.4 v1.5 非安全镜像仓库配置”一节的说明操作。' else cat >> /etc/containerd/config.toml << 'EOF' [plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d/" EOF fi fi config_path_var=$(grep -F '/etc/containerd/certs.d' /etc/containerd/config.toml) if [ -z "$config_path_var" ]; then echo '配置文件中 config_path 字段的值不合预期,请检查!' exit 1 fi- 创建
hosts.toml文件。
如果上一步执行的命令提示
请按照“Containerd v1.4 v1.5 非安全镜像仓库配置”一节的说明操作。请参考 Containerd v1.4 v1.5 非安全镜像仓库配置 一节。REGISTRY=<“获取镜像仓库地址”一节中获得的镜像仓库地址> mkdir -p "/etc/containerd/certs.d/$REGISTRY/" cat > "/etc/containerd/certs.d/$REGISTRY/hosts.toml" << EOF server = "$REGISTRY" [host."http://$REGISTRY"] capabilities = ["pull", "resolve", "push"] skip_verify = true [host."https://$REGISTRY"] capabilities = ["pull", "resolve", "push"] skip_verify = true EOF- 重启 Containerd 服务。
systemctl daemon-reload && systemctl restart containerd - 判断配置文件中是否存在