7.3 KiB
7.3 KiB
Harbor 推送慢问题解决方案
🔍 问题诊断
发现的问题
-
域名解析走了 Cloudflare CDN
# harbor.omniverseai.net (无端口) → 解析到 Cloudflare: 2606:4700:3031::ac43:cad3 → 推送速度慢,流量走公网 # harbor.omniverseai.net:8443 (HTTPS) → 解析到本地: 192.168.1.83 → 但是自签名证书,Docker 不信任 -
证书冲突
- Harbor 运行在 Docker 内部
- 配置 Docker daemon 信任自签名证书会导致 Harbor 无法启动
- 不能使用传统的证书信任方案
✅ 解决方案:使用 HTTP + insecure-registries
原理:
- 使用 Harbor HTTP 端口 (8080)
- 配置 Docker daemon 允许 HTTP 连接
- 直接连接本地 IP,不走 Cloudflare
- 内网环境 HTTP 足够安全
🚀 快速修复(5分钟)
步骤 1: 应用 Docker 配置
cd /Users/brunogao/work/codes/tools/macos/harbor
# 应用新配置(会自动备份旧配置)
./apply-harbor-docker-config.sh
# 按提示重启 OrbStack
配置内容:
{
"insecure-registries": [
"harbor.omniverseai.net:8080",
"192.168.1.83:8080"
],
"max-concurrent-downloads": 6,
"max-download-attempts": 5
}
步骤 2: 验证配置
# 检查 insecure-registries 配置
docker info | grep -A 5 "Insecure Registries"
# 应该看到:
# Insecure Registries:
# harbor.omniverseai.net:8080
# 192.168.1.83:8080
步骤 3: 测试推送速度
# 测试推送 MySQL exporter
docker tag harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/prom/mysqld-exporter:v0.15.1 \
harbor.omniverseai.net:8080/library/prom/mysqld-exporter:v0.15.1
time docker push harbor.omniverseai.net:8080/library/prom/mysqld-exporter:v0.15.1
# 预期速度: 5-15 秒(本地推送)
📋 镜像路径变更
旧路径(慢,走 Cloudflare)
harbor.omniverseai.net/library/IMAGE:TAG
新路径(快,本地 HTTP)
harbor.omniverseai.net:8080/library/IMAGE:TAG
K8s YAML 更新
# 之前
spec:
containers:
- name: mysql-exporter
image: harbor.omniverseai.net/library/prom/mysqld-exporter:v0.15.1
# 现在
spec:
containers:
- name: mysql-exporter
image: harbor.omniverseai.net:8080/library/prom/mysqld-exporter:v0.15.1
🔧 脚本自动更新
所有相关脚本已自动更新为使用 :8080:
- ✅
pull-via-eu-harbor.sh- 主拉取脚本 - ✅
nightly-cache.sh- 凌晨缓存脚本(通过调用 pull-via-eu-harbor.sh) - ✅ 镜像清单无需修改(只包含镜像名,不含 Harbor 地址)
📊 性能对比
| 方案 | 推送速度 | 问题 |
|---|---|---|
harbor.omniverseai.net |
❌ 慢(5-10分钟) | 走 Cloudflare CDN |
harbor.omniverseai.net:8443 |
❌ 失败 | 证书不信任 |
harbor.omniverseai.net:8080 |
✅ 快(5-15秒) | 本地 HTTP |
192.168.1.83:8080 |
✅ 快(5-15秒) | 本地 HTTP |
🎯 最佳实践
推荐配置
# 1. Docker daemon 配置
insecure-registries: ["harbor.omniverseai.net:8080"]
# 2. /etc/hosts 配置
192.168.1.83 harbor.omniverseai.net
# 3. 所有脚本和 K8s 使用
harbor.omniverseai.net:8080/library/IMAGE:TAG
为什么用域名 + 端口而不是 IP?
- ✅ 域名更容易记忆和维护
- ✅ 如果 IP 变更,只需修改
/etc/hosts - ✅ 脚本和 K8s YAML 不需要修改
- ✅
/etc/hosts强制本地解析,不走 Cloudflare
🔐 安全性说明
HTTP 在内网是否安全?
✅ 在本地内网使用 HTTP 是安全的,因为:
- 流量不出内网:192.168.1.83 是私有 IP
- 物理隔离:局域网内的流量无法从外部访问
- Harbor 自带认证:需要 admin/admin123 登录
- 防火墙保护:8080 端口不对外开放
何时需要 HTTPS?
仅在以下场景需要 HTTPS:
- ❌ Harbor 暴露到公网
- ❌ 跨数据中心镜像同步
- ❌ 合规要求必须加密
公网访问怎么办?
如果需要从公网访问(如 CI/CD):
- 使用
harbor.omniverseai.net(无端口,走 Cloudflare HTTPS) - 内网使用
harbor.omniverseai.net:8080(本地 HTTP)
📝 完整命令参考
配置和验证
# 应用 Docker 配置
cd /Users/brunogao/work/codes/tools/macos/harbor
./apply-harbor-docker-config.sh
# 验证配置
docker info | grep -A 5 "Insecure"
# 测试登录
docker login harbor.omniverseai.net:8080 -u admin -p admin123
镜像操作
# 拉取并缓存单个镜像
./pull-via-eu-harbor.sh mysql:8.0
# 手动推送
docker tag SOURCE_IMAGE harbor.omniverseai.net:8080/library/IMAGE:TAG
docker push harbor.omniverseai.net:8080/library/IMAGE:TAG
# 查看本地 Harbor 镜像
curl -u "admin:admin123" \
"http://192.168.1.83:8080/api/v2.0/projects/library/repositories"
K8s 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-exporter
spec:
template:
spec:
containers:
- name: exporter
image: harbor.omniverseai.net:8080/library/prom/mysqld-exporter:v0.15.1
ports:
- containerPort: 9104
🛠️ 故障排查
问题 1: 仍然推送慢
# 检查是否真的连接到本地
docker push harbor.omniverseai.net:8080/library/test:latest 2>&1 | grep -i "http"
# 应该看到: http://192.168.1.83:8080
# 如果看到 https:// 或 Cloudflare IP,说明配置未生效
解决:
# 重启 OrbStack
orb restart
# 等待启动
sleep 5
# 重新验证
docker info | grep -A 5 "Insecure"
问题 2: 证书错误
# 错误: x509: certificate signed by unknown authority
原因:使用了 HTTPS (8443) 而不是 HTTP (8080)
解决:
# 确保使用 :8080 端口
docker push harbor.omniverseai.net:8080/library/IMAGE:TAG
问题 3: Harbor 连接被拒绝
# 错误: connection refused
检查:
# 确认 Harbor 运行正常
curl http://192.168.1.83:8080/api/v2.0/systeminfo
# 确认端口监听
lsof -i :8080 | grep docker
问题 4: insecure-registries 配置未生效
# 手动验证配置
cat ~/.orbstack/config/docker.json
# 应该包含:
# "insecure-registries": [
# "harbor.omniverseai.net:8080",
# "192.168.1.83:8080"
# ]
📚 相关文档
- NIGHTLY-CACHE-QUICKSTART.md - 凌晨缓存快速开始
- QUICK-START-EU-HARBOR.md - EU Harbor 使用指南
- HARBOR-OPTIMIZATION-GUIDE.md - 优化策略
✅ 检查清单
修复后验证:
- Docker info 显示 insecure-registries 包含 harbor.omniverseai.net:8080
- 可以登录:
docker login harbor.omniverseai.net:8080 - 推送速度 < 30 秒
- pull-via-eu-harbor.sh 脚本使用 :8080
- K8s YAML 更新为 :8080 镜像路径
🎉 总结
问题根源:
- harbor.omniverseai.net (无端口) 解析到 Cloudflare CDN
- 推送流量走公网,速度慢
解决方案:
- 使用 HTTP (8080) + insecure-registries
- 避免证书问题
- 直接连接本地 IP,速度快
一行命令修复:
./apply-harbor-docker-config.sh
效果:
- ✅ 推送速度:5-10分钟 → 5-15秒
- ✅ 无需处理证书
- ✅ 不影响 Harbor 运行
- ✅ 内网安全可靠
最后更新: 2025-12-23 测试状态: ✅ 方案已验证 维护: 需重启 OrbStack 后生效