📌 本文导览
字数:约 1500+ 字,阅读时间:8 分钟 你将了解到: ✅ Harbor 私有镜像仓库与 Kubernetes 的集成方法 ✅ 使用 containerd 配置 HTTP 私有仓库 ✅ 创建镜像拉取 Secret 并正确应用到 Pod ✅ 从 Harbor 拉取镜像并运行 Pod 的完整流程 ✅ 常见错误(HTTP 仓库、认证失败、ImagePullBackOff)的排障思路
在前面的系列文章中,我们已经完成了 CI/CD 架构设计、Jenkins 部署等基础工作。
但这些都只是“准备阶段”。
👉 真正的分水岭是:镜像能不能成功流转起来。
现在,我们做一件非常关键的事情:
🔥 打通 Harbor → Kubernetes 镜像拉取链路
在企业 CI/CD 的核心链路中:
代码 → 构建 → 镜像 → 仓库 → 部署 → 运行
今天我们完成的是中间最关键的一段:
Harbor → Kubernetes → Pod 运行
👉 一旦这一步打通,后续的 Jenkins 自动化就只是“锦上添花”。


当前实验环境:
👉 核心目标:
让 Kubernetes 从 Harbor 拉取私有镜像并成功运行 Pod
在开始之前,请确保以下条件满足:
访问 http://<Harbor-IP>能够正常登录:
admin / 自定义密码

我已提前推送了一个测试镜像:
docker tag m.daocloud.io/docker.io/library/nginx xxx.xxx.xxx.xxx/demo/nginx:test
docker push xxx.xxx.xxx.xxx/demo/nginx:test

👉 Harbor 中存在:demo/nginx:test
修改 /etc/containerd/config.toml,添加:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."Harhor 地址"]
endpoint = ["Harhor 地址"]

重启 containerd:
systemctl restart containerd
kubectl create secret docker-registry harbor-secret \
--docker-server=Harbor地址 \
--docker-username=admin \
--docker-password=你的密码 \
--docker-email=test@test.com
本实验中的 Jenkins 用于后续 CI/CD 流水线,不影响当前 Harbor→K8s 的链路验证。 如果你需要部署 Jenkins,推荐使用如下 yaml 快速安装:
apiVersion: apps/v1
kind:Deployment
metadata:
name:jenkins
namespace:cicd
spec:
replicas:1
selector:
matchLabels:
app:jenkins
template:
metadata:
labels:
app:jenkins
spec:
containers:
-name:jenkins
image:m.daocloud.io/docker.io/jenkins/jenkins:lts
ports:
-containerPort:8080
---
apiVersion:v1
kind:Service
metadata:
name:jenkins
namespace:cicd
spec:
type:NodePort
ports:
-port:8080
nodePort:30080
selector:
app:jenkins
安装完成后,通过 kubectl get pods -n cicd确认 Jenkins 正常运行即可。 后续文章我将使用 Jenkins + Kaniko 实现自动构建与推送。
test-harbor.yaml:
apiVersion: v1
kind:Pod
metadata:
name:test-harbor
spec:
containers:
-name:nginx
image:192.168.114.136/demo/nginx:test
ports:
-containerPort:80
imagePullSecrets:
-name:harbor-secret
kubectl apply -f test-harbor.yaml
kubectl get pod -w
当状态变为 Running:
test-harbor Running
👉 说明镜像已成功拉取并运行
进入容器测试:
kubectl exec -it test-harbor -- curl localhost
返回结果示例:

Welcome to nginx!
👉 这说明:
很多人会低估这一步,但实际上你已经具备了企业级关键能力:
镜像构建(手动)→ Harbor 仓库 → Kubernetes 拉取 → Pod 运行成功
👉 在真实企业环境中,这一步已经可以支撑生产部署。
错误现象 | 常见原因 | 解决方案 |
|---|---|---|
http: server gave HTTP response to HTTPS client | containerd 默认要求 HTTPS,但 Harbor 使用 HTTP | 配置 containerd 的 registry.mirrors为 HTTP 端点 |
unauthorized | 未配置或配置错误的 imagePullSecret | 正确创建 secret,并确保 Pod 中引用 |
ImagePullBackOff | Harbor 地址错误 / 网络不通 / secret 缺失 | 检查地址、网络连通性,重新创建 secret |
到这里,我们才真正具备:
🔥 做自动化流水线的基础条件
接下来我们将进入:
🚀 Jenkins + Kaniko 构建镜像并自动推送 Harbor
实现完整的自动化闭环:
Git → Jenkins → 构建镜像 → 推送 Harbor → 自动部署到 Kubernetes
今天我们做了一件非常关键的事情:
✅ 打通了 Harbor 到 Kubernetes 的部署链路
这意味着:
本文内部分图示来源于互联网,侵删!