3. 复制策略类型:基于项目的复制、基于资源的复制、Push-based vs Pull-based 模式

Harbor 复制策略的核心在于“从哪复制”和“如何触发复制”。从复制范围上分为基于项目和基于资源两种粒度;从数据传输方向上分为Push-based(推送)和Pull-based(拉取)两种模式。理解这些分类是设计跨环境复制拓扑的前提。

3.1 基于项目的复制(Project-based)

基于项目的复制是最常用的策略类型。管理员选择一个源项目,Harbor 会自动将该项目下的所有仓库和所有标签同步到目标实例的指定项目中。

  • 适用场景:完整环境迁移、灾备全量同步、多数据中心项目级镜像分发。
  • 特点:配置简单,一次策略覆盖整个项目;源项目新增仓库或标签时,策略会自动发现并同步。
  • 限制:无法精细控制只同步部分仓库或特定标签;目标项目必须存在或由策略自动创建。
对比维度 基于项目的复制 基于资源的复制
粒度 项目级别(全部仓库+标签) 仓库/标签级别(可筛选)
配置复杂度 低,一次配置 中高,需指定资源过滤条件
资源过滤 不支持 支持仓库名/标签名正则匹配
新增资源同步 自动同步 需满足过滤条件才同步
推荐场景 全量同步、灾备、环境克隆 选择性分发、灰度发布、按标签同步

3.2 基于资源的复制(Resource-based)

基于资源的复制允许管理员通过仓库名称和标签名称的正则表达式来精确控制同步范围。只有匹配过滤条件的镜像才会被复制。

典型配置示例:

源项目:library
仓库过滤:nginx|redis|mysql
标签过滤:v[0-9]+\.[0-9]+|latest
结果:只同步 nginx、redis、mysql 仓库中版本号标签或 latest 标签的镜像。
  • 适用场景:仅同步生产环境需要的稳定版本、排除开发标签、按业务模块选择性分发。
  • 特点:灵活精细,减少不必要的传输和存储;可配合“保留标签”策略实现精准同步。
  • 注意事项:过滤条件写错可能导致同步遗漏;建议先在测试环境验证正则表达式。

3.3 Push-based vs Pull-based 模式

复制方向决定了数据流的发起端。Push-based 由源 Harbor 主动推送镜像到目标;Pull-based 由目标 Harbor 主动从源拉取镜像。两种模式在架构上互为镜像,但适用场景和网络要求不同。

核心判断依据: 网络连通性决定模式选择。如果源 Harbor 可以访问目标,用 Push;如果目标可以访问源,用 Pull。双向网络不通时,可借助代理或 VPN 桥接。

Push-based vs Pull-based 复制模式对比 Push-based vs Pull-based 复制模式对比 Push-based(推送模式) 源 Harbor 主动推送 推送方向 目标 Harbor 被动接收 源 Harbor 配置目标端点,主动发起复制任务 适用于源端可访问目标端的网络环境 Pull-based(拉取模式) 源 Harbor 被动提供 拉取方向 目标 Harbor 主动拉取 目标 Harbor 配置源端点,主动发起拉取任务 适用于目标端可访问源端的网络环境 模式对比 维度 Push-based Pull-based 网络要求 源 → 目标 可访问 目标 → 源 可访问 安全控制 源端控制推送范围 目标端控制拉取范围 典型场景 开发→测试环境推送 生产环境从测试拉取

3.4 模式选择决策矩阵

在实际跨环境部署中,Push 和 Pull 并非互斥,可以混合使用。以下决策矩阵帮助你在不同网络拓扑下快速选择:

网络拓扑 推荐模式 原因
源 Harbor 可访问目标 Harbor Push-based 源端主动推送,配置直观,便于集中管理复制策略
目标 Harbor 可访问源 Harbor Pull-based 目标端按需拉取,避免源端暴露过多网络权限
双向网络互通 任选,推荐 Push Push 模式下复制日志集中在源端,便于审计
源 Harbor 在 DMZ,目标在内网 Pull-based 内网目标主动拉取,减少 DMZ 对外连接
目标 Harbor 在公有云,源在私有 IDC Push-based 私有 IDC 主动推送至云上,避免云上主动穿透防火墙
多级复制(A→B→C) 混合模式 A→B 用 Push,B→C 用 Pull,灵活适配各段网络

常见陷阱: 在 Push-based 模式下,如果目标 Harbor 的磁盘空间不足,复制任务会失败并重试,可能导致源 Harbor 复制队列积压。建议在目标端配置自动清理策略或设置磁盘告警阈值。

3.5 复制策略类型与模式组合

基于项目/资源的复制可以与 Push/Pull 模式自由组合,形成四种常见的复制策略配置:

  • 项目级 + Push:最常用,适合开发环境向测试环境全量推送。
  • 项目级 + Pull:适合生产环境从预发布环境拉取全量镜像。
  • 资源级 + Push:适合只推送特定版本到外部客户环境。
  • 资源级 + Pull:适合按需拉取特定仓库的稳定标签。
复制策略类型与模式组合拓扑 四种复制策略组合拓扑 项目级 + Push 源项目 → 目标项目 全量自动推送 开发→测试 项目级 + Pull 目标项目 ← 源项目 全量按需拉取 预发布→生产 资源级 + Push 筛选仓库/标签 精准推送 内部→外部客户 资源级 + Pull 筛选仓库/标签 按需拉取 测试→生产稳定版 组合策略选择建议 • 项目级 + Push:最简配置,适合内部环境全量同步 • 项目级 + Pull:适合生产环境从可信源拉取 • 资源级 + Push/Pull:适合精细控制同步范围,减少带宽和存储浪费 • 混合使用:多级复制场景下,不同段可采用不同组合

3.6 实战校验要点

在配置复制策略时,务必校验以下关键点:

  1. 项目名称映射:基于项目复制时,确认目标项目名称是否与源一致,或使用“替换目标项目”功能。
  2. 资源过滤正则:基于资源复制时,在 Harbor 的“测试过滤”功能中验证正则表达式是否匹配预期镜像。
  3. 网络连通性测试:在创建复制策略前,先通过 Harbor 的“端点测试”功能验证源/目标 Harbor 的连通性。
  4. 模式选择验证:Push 模式下检查源 Harbor 是否有目标 Harbor 的写入权限;Pull 模式下检查目标 Harbor 是否有源 Harbor 的读取权限。
  5. 复制日志检查:首次复制完成后,检查复制日志中的成功/失败记录,确认镜像数量和标签完整性。

快速校验命令(Harbor API):

# 查看复制策略列表
curl -u admin:Harbor12345 https://harbor.example.com/api/v2.0/replication/policies

# 手动触发复制策略(policy_id 从上面获取)
curl -u admin:Harbor12345 -X POST \
  https://harbor.example.com/api/v2.0/replication/executions \
  -H "Content-Type: application/json" \
  -d '{"policy_id": 1}'