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
参数才可以