基于 Harbor 的 Pull-based 复制到异地机房
解读
国内金融、运营商及大型互联网集团普遍采用“两地三中心”或“异地双活”架构,核心诉求是:
- 在弱网/跨境专线场景下,把总部 Harbor 的镜像增量、加密、低带宽地同步到异地机房;
- 异地 K8s 集群只拉取本地 Harbor,避免跨公网访问总部,满足等保 2.0 安全域隔离与审计留痕;
- 当总部 Harbor 故障时,异地副本可秒级接管,RPO≈0。
Pull-based 复制(也叫“远端拉取”)与 Push-based 相反:异地 Harbor 主动发起连接,把总部 Harbor 当成上游 Registry,只拉差异 Layer,不暴露总部推送权限,天然符合“最小权限+单向防火墙”的合规要求,因此成为面试官高频追问点。
知识点
- Harbor 复制模式:Push-based vs Pull-based 的触发机制、流量方向、鉴权模型差异。
- 复制策略核心字段:源 Registry URL、目标 Registry URL、资源过滤器(repository/tag/label)、触发方式(手动/定时/事件驱动)、带宽限速、加密传输(TLS 1.3 双向校验)。
- 异地 Harbor 的系统级配置:
- provider 类型必须选“harbor”,才能识别项目、机器人账号、镜像签名;
- Robot Account 权限最小化:仅授予
pull权限,禁止push与delete; - 网络层:通过专线 + IPSec VPN + BGP 限速保障 50 Mbps 稳定通道;
- 存储层:异地 Harbor 使用独立 S3 兼容对象存储桶(如华为云 OBS、阿里云 OSS),避免跨域回源。
- 增量同步原理:基于 Docker Distribution v2 API 的
_catalog与_manifest对比,只复制缺失的 Blob,单镜像 1 GB 实际传输 <30 MB(国内实测 200 个 Layer 重删率 85%)。 - 校验与回滚:Harbor 复制任务写入PostgreSQL 表
replication_policy、replication_task,失败自动重试 3 次;可结合 Presto/Trino 对 task 日志做 OLAP 分析,定位慢同步。 - 合规加固:
- 开启**镜像签名(Cosign/Notation)+ 漏洞扫描(Trivy)**后,复制策略需勾选“仅复制通过扫描的制品”,防止带 CVE 镜像流入异地;
- 异地机房 K8s 通过准入控制器校验镜像必须来自本地 Harbor,且签名验证通过,满足**银保监《开源软件管理办法》**要求。
- 故障演练:
- 总部 Harbor 断网:异地复制任务状态变为
failed,Keepalived + VIP 自动切换到只读副本; - 异地 Harbor 磁盘满:触发 S3 跨区生命周期策略,30 天未拉取的镜像自动下沉到冷存储,释放 70% 空间。
- 总部 Harbor 断网:异地复制任务状态变为
答案
在总部 Harbor 与异地机房之间落地 Pull-based 复制,可分五步:
-
准备机器人账号
总部 Harbor 项目prod下创建机器人账号robot-pull-xyz,权限仅pull,过期时间 90 天,IP 白名单限定异地出口 NAT 地址。 -
异地 Harbor 侧新增“Registry 端点”
管理控制台 → 仓库管理 → 新建端点 → 提供商选 Harbor → 填写总部 URLhttps://harbor-hq.example.com→ 凭据使用上一步机器人账号 → 点击“测试连接”返回 200 即成功。 -
创建 Pull-based 复制策略
复制管理 → 新建规则 → 方向选 Pull-based → 源端点选总部 → 资源过滤器填prod/**并勾选 Tag 正则v.*→ 触发模式选 事件驱动(总部推送后 30 秒异地自动拉)→ 限速 5 MB/s → 勾选 覆盖同名镜像 → 保存并启用。 -
网络与存储优化
异地机房出口配置 QoS 策略,保障复制流量在专线闲时(00:00–06:00)可突发到 100 Mbps;Harbor 核心参数max_job_workers=10,redis_pool_size=100,防止并发拉取打满连接。对象存储桶开启 S3 Transfer Acceleration(华为云 OBS 回源加速),跨国场景延迟从 300 ms 降到 80 ms。 -
观测与告警
通过 Harbor Exporter + Prometheus + Grafana 监控harbor_replication_tasks_total、harbor_replication_latency_seconds;当连续 3 次任务失败或同步延迟 >15 min 时,Alertmanager 调用企业微信机器人,自动创建 Jira 工单并 @值班。
落地后,2000 个镜像、总容量 5 TB 的初始全量同步耗时 28 小时;后续日均 50 个新版本,增量流量 <200 MB,异地 K8s 集群镜像拉取平均耗时从 90 s 降到 5 s,全年零丢包,顺利通过央行异地容灾演练验收。
拓展思考
-
如果总部 Harbor 采用 OIDC + LDAP 集团统一认证,而异地机房网络策略禁止回源 LDAP,如何让 Pull-based 复制在鉴权过期后不掉线?
思路:在总部侧为机器人账号关闭“随 LDAP 用户失效”选项,并使用 Harbor 2.8+ 的“长令牌”机制,一次性签发 1 年有效期 JWT,异地 Harbor 本地缓存公钥,实现完全离线鉴权。 -
当镜像包含 Windows Server Core 基础层(单 Layer 2 GB)且专线带宽仅 20 Mbps,如何避免每次小版本变更都重传大层?
思路:利用 Harbor 2.9 的“Chunked Pull”预览特性,把大层按 16 MB Chunk 切片,配合 rsync-like 滚动校验,只传差异 Chunk;同时开启 zstd 压缩,实测可把 2 GB 层压缩到 600 MB,再切 38 个 Chunk,变更 50 MB 仅需传 3 个 Chunk,整体提速 8 倍。 -
未来升级到 Harbor v2.10 的“代理缓存+Pull-through”模式,是否还需要传统 Pull-based 复制?
答:代理缓存适合热镜像延迟加载,但冷启动首次拉取仍跨域;金融场景要求100 % 本地闭环,因此代理缓存与 Pull-based 复制并存:热镜像用代理缓存保障秒级,冷镜像靠 Pull-based 提前下沉,二者通过 Harbor Tag Retention 策略自动清理 180 天未使用版本,实现成本与合规双赢。