本文将详细介绍如何调整 containerd 配置,使整个 Kubernetes 集群都能顺畅拉取 Harbor 私有仓库中的镜像。
一、准备工作
需提前准备好以下环境: 已部署完成的 Harbor 仓库:参考《快速搭建一套企业级 Harbor 镜像仓库》 正常运行的 Kubernetes 集群:参考《领导让我部署一套 Kubernetes 集群,我咔咔咔就给他搞定(1.32 无坑版)》
如果尚未完成环境搭建,可以按照我往期文章进行部署,再继续下面的操作步骤。

二、Harbor 前期配置
1. 创建 Harbor 项目
在 Harbor 中新建一个名为 prod 的私有项目仓库

2. 推送镜像到 Harbor 仓库
# 从公网下载基础镜像
docker pull docker.m.daocloud.io/nginx:1.27
# 重新标记镜像,指向 Harbor 仓库
docker tag docker.m.daocloud.io/nginx:1.27 harbor.liyb.com/prod/nginx:1.27
# 登录 Harbor Registry
docker login harbor.liyb.com -u admin -p 输入密码
# 推送镜像至仓库
docker push harbor.liyb.com/prod/nginx:1.27
Kubernetes 接入 Harbor 仓库有两种常用方式:一种是创建 Secret 凭证,通过 imagePullSecrets 字段注入到需要运行的 Pod 中,这种方式仅对单个 Pod 有效;另一种是将 Harbor 认证信息配置到容器运行时,这样整个集群都能生效。
考虑到第一种方式配置较为简单,下面重点演示如何修改 containerd 配置,实现集群所有节点都能直接拉取 Harbor 镜像。
三、调整 containerd 配置文件
需要在每个节点上配置 containerd 的镜像拉取认证信息。
1. 修改配置文件
编辑 containerd 的主配置文件,通常位于 /etc/containerd/config.toml
# 修改前建议先备份原配置
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
# 编辑文件,添加以下配置段
vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.liyb.com".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.liyb.com".auth]
username = "admin"
password = "Harbor12345"
如果配置了 TLS 证书:当 Harbor 使用自签名证书时,需要添加受信任的根证书:
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.liyb.com".tls]
ca_file = "/etc/containerd/certs/harbor-ca.crt"
若证书尚未配置妥当,可以暂时通过设置 insecure_skip_verify = true 来跳过证书验证。
保存文件后,重启 containerd 服务:
sudo systemctl restart containerd
2. 其他节点同步操作
# 将配置文件分发到其他节点
scp /etc/containerd/config.toml root@10.0.0.211:/etc/containerd
scp /etc/containerd/config.toml root@10.0.0.212:/etc/containerd
# 通过 Master 节点重启其他节点的 containerd 服务
ssh root@10.0.0.211 systemctl restart containerd
ssh root@10.0.0.212 systemctl restart containerd
3. 每个节点添加 hosts 解析
cat >> /etc/hosts << EOF
10.0.0.207 harbor.liyb.com
EOF
四、验证镜像拉取功能
现在测试从集群拉取镜像:
# 拉取 Harbor 中的镜像
crictl pull harbor.liyb.com/prod/nginx:1.27
# 查看已下载的镜像
crictl images | grep nginx
可以看到镜像已经成功拉取到本地,说明配置已生效。
