首页 / 平台管理 / 集群管理 / 集群 / 常见问题 / 如何信任非安全镜像仓库?

如何信任非安全镜像仓库?

问题描述

提供平台组件镜像的镜像仓库可能未提供 HTTPS 服务,或没有提供由公共认证机构认证的合法 TLS 证书。您若信任该镜像仓库,请参考以下操作步骤配置容器运行时。

信任非安全镜像仓库配置

根据您所使用的容器运行时,配置镜像仓库信任的步骤也有不同。文档支持 docker 和 containerd 两种容器进行时。

Docker 运行时

操作步骤

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 备份 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"
    }
  2. (可选)使用 jq 命令检查 Docker 配置文件语法。

    提示:请确保主机上已安装 jq,可参考命令:yum install jq -y

    jq . < /etc/docker/daemon.json
  3. 重启所有节点 Docker 服务。

    systemctl daemon-reload
    systemctl restart docker

Containerd 运行时

注意

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 备份配置文件
    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 非安全镜像仓库配置

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 修改 /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 非安全镜像仓库配置

  1. 在被接入集群的 所有节点 上分别执行以下命令:

    • 判断配置文件中是否存在 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