如何信任不安全的镜像仓库?

问题描述

托管平台组件镜像的镜像仓库可能不提供 HTTPS 服务,或者没有由公共证书颁发机构签发的有效 TLS 证书。如果您信任该仓库,请按照以下步骤配置您的容器运行时。

配置对不安全镜像仓库的信任

注意:

  • 所有需要使用镜像的节点,包括新加入的节点,都必须进行配置并重启 Containerd。
  • Containerd v1.4/v1.5 与 v1.6 的配置略有不同,请根据您的版本选择相应步骤。
  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 不安全仓库配置
  2. 在导入集群的每个节点上运行以下命令:

    • 编辑 /etc/containerd/config.toml

      # 添加到配置文件的示例内容
      # 方括号内为节名称,若文件已有同名节,请合并内容
      [plugins."io.containerd.grpc.v1.cri".registry]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
              [plugins."io.containerd.grpc.v1.cri".registry.mirrors."<registry-address>"]
                  endpoint = ["https://<registry-address>", "http://<registry-address>"]
              [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."<registry-address>".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/containerd/config.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='<registry address obtained in the "Get the registry address" section>'    
      
      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