k8s 使用 containerd 作为容器运行时拉取 http 的 harbor 私有仓库镜像


版本介绍

  • k8s:v1.28.2
  • containerd:1.6.33

报错内容

我的 harbor 用的是 http 的,因为是内网自己用,就没有配置 https 了,于是配置好镜像拉取的凭据,pod 拉取镜像会有以下的报错

Failed to pull image "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to pull and unpack image "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to resolve reference "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to do request: Head "https://harbor.devops.icu/v2/baseimage/prometheus/manifests/v2.54.1": dial tcp 192.168.18.222:443: connect: connection refused

解决方法

官方 Github 上面展示的配置文件介绍:hosts.md

主配置文件修改

主配置文件需要增加仓库配置文件的目录,目录名称自己定义,我这边是配置的 registry_config

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/registry_config"

创建目录

mkdir /etc/containerd/registry_config

创建镜像仓库配置

目录结构树

/etc/containerd/registry_config
└── harbor.devops.icu    # 镜像仓库的 ip:端口 或者域名
    └── hosts.toml       # 这个文件名称是固定的

创建镜像仓库目录,这里的仓库地址换成自己的

mkdir /etc/containerd/registry_config/harbor.devops.icu

创建配置文件,/etc/containerd/registry_config/harbor.devops.icu/hosts.toml,仓库地址这块改成自己的,我是 http 的仓库,所以增加了 skip_verify = true

server = "http://harbor.devops.icu"

[host."http://harbor.devops.icu"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true

capabilities 表示可以对镜像仓库执行的操作,总共只有 "pull", "resolve", "push" 这三个值

重启 containerd

systemctl restart containerd

备注

这个只是解决了 k8s 可以直接拉取 http 私有仓库的问题,使用 ctr 命令拉取 http 私有仓库,还是需要加上 --plain-http 参数才可以

posted @ 2024-10-24 11:47  月巴左耳东  阅读(138)  评论(0编辑  收藏  举报