跨区域镜像复制是企业全球部署 Java 微服务的基石。当业务需要多地部署时,每个数据中心的 Kubernetes 或 Swarm 集群应当就近从本地镜像仓库拉取,以减少延迟、节省跨地域带宽并满足数据驻留合规。这需要镜像仓库支持自动、可靠的跨区域复制能力。
一、跨区域复制的核心场景
| 多活部署 | 同一服务在不同区域独立运行,各自从本地 Registry 拉取镜像。 | 确保滚动更新时,所有区域 Pod 能快速一致地拉取新版本镜像。 |
| 灾备恢复 | 主区域 Registry 不可用时,备用区域仍保有完整镜像集,可切换流量。 | 保障服务连续性,镜像层面实现异地容灾。 |
| 本地拉取加速 | 基础镜像(如 JDK)和业务镜像在开发测试区域本地缓存,避免每次从中心仓库跨洋拉取。 | 大幅缩短 CI/CD 构建时间,提升开发体验。 |
| 合规与数据主权 | 某些地区要求数据留在境内,镜像仓库需要在当地部署,通过复制把允许的镜像同步过去。 | 满足金融、政府等行业合规要求。 |
二、主流实现方案对比
| Harbor 远程复制 | 内置功能,通过复制规则在 Harbor 实例间同步镜像。 | 企业级,支持推/拉模式、过滤规则、带宽控制、任务监控。 | 需要部署 Harbor(或其他兼容仓库)。 | 中大型企业,多区域 Harbor 集群。 |
| Docker Registry 镜像代理 | 将 Registry 配置为拉取缓存,本地无镜像时从上游 Registry 代理拉取并缓存。 | 简单,无需提前复制。 | 按需缓存,无主动推送,首次拉取可能较慢,无细粒度控制。 | 单区域内部加速,不适合严格的多区域同步。 |
| skopeo 同步脚本 | 使用 skopeo copy 在任意仓库间复制镜像,配合 cron 或 CI。 | 灵活,可跨不同厂商仓库。 | 需自行管理逻辑、重试、并发、日志,非平台原生。 | 临时或异构仓库同步,轻量级方案。 |
| 云服务商跨区域复制 | AWS ECR 跨区域同步、Azure ACR 异地复制等。 | 原生托管,自动异步复制,性能可靠。 | 仅限特定云平台,有成本。 | 完全使用某一公有云的场景。 |
三、Harbor 跨区域复制的架构与原理
Harbor 是 CNCF 毕业的企业级镜像仓库,其复制功能成熟且广泛使用。下面是其核心架构。
#mermaid-svg-PWveC0IoxylnSaOe{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PWveC0IoxylnSaOe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PWveC0IoxylnSaOe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PWveC0IoxylnSaOe .error-icon{fill:#552222;}#mermaid-svg-PWveC0IoxylnSaOe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PWveC0IoxylnSaOe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PWveC0IoxylnSaOe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PWveC0IoxylnSaOe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PWveC0IoxylnSaOe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PWveC0IoxylnSaOe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PWveC0IoxylnSaOe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PWveC0IoxylnSaOe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PWveC0IoxylnSaOe .marker.cross{stroke:#333333;}#mermaid-svg-PWveC0IoxylnSaOe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PWveC0IoxylnSaOe p{margin:0;}#mermaid-svg-PWveC0IoxylnSaOe .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-PWveC0IoxylnSaOe .cluster-label text{fill:#333;}#mermaid-svg-PWveC0IoxylnSaOe .cluster-label span{color:#333;}#mermaid-svg-PWveC0IoxylnSaOe .cluster-label span p{background-color:transparent;}#mermaid-svg-PWveC0IoxylnSaOe .label text,#mermaid-svg-PWveC0IoxylnSaOe span{fill:#333;color:#333;}#mermaid-svg-PWveC0IoxylnSaOe .node rect,#mermaid-svg-PWveC0IoxylnSaOe .node circle,#mermaid-svg-PWveC0IoxylnSaOe .node ellipse,#mermaid-svg-PWveC0IoxylnSaOe .node polygon,#mermaid-svg-PWveC0IoxylnSaOe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PWveC0IoxylnSaOe .rough-node .label text,#mermaid-svg-PWveC0IoxylnSaOe .node .label text,#mermaid-svg-PWveC0IoxylnSaOe .image-shape .label,#mermaid-svg-PWveC0IoxylnSaOe .icon-shape .label{text-anchor:middle;}#mermaid-svg-PWveC0IoxylnSaOe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PWveC0IoxylnSaOe .rough-node .label,#mermaid-svg-PWveC0IoxylnSaOe .node .label,#mermaid-svg-PWveC0IoxylnSaOe .image-shape .label,#mermaid-svg-PWveC0IoxylnSaOe .icon-shape .label{text-align:center;}#mermaid-svg-PWveC0IoxylnSaOe .node.clickable{cursor:pointer;}#mermaid-svg-PWveC0IoxylnSaOe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PWveC0IoxylnSaOe .arrowheadPath{fill:#333333;}#mermaid-svg-PWveC0IoxylnSaOe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PWveC0IoxylnSaOe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PWveC0IoxylnSaOe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PWveC0IoxylnSaOe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PWveC0IoxylnSaOe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PWveC0IoxylnSaOe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PWveC0IoxylnSaOe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PWveC0IoxylnSaOe .cluster text{fill:#333;}#mermaid-svg-PWveC0IoxylnSaOe .cluster span{color:#333;}#mermaid-svg-PWveC0IoxylnSaOe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PWveC0IoxylnSaOe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PWveC0IoxylnSaOe rect.text{fill:none;stroke-width:0;}#mermaid-svg-PWveC0IoxylnSaOe .icon-shape,#mermaid-svg-PWveC0IoxylnSaOe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PWveC0IoxylnSaOe .icon-shape p,#mermaid-svg-PWveC0IoxylnSaOe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PWveC0IoxylnSaOe .icon-shape .label rect,#mermaid-svg-PWveC0IoxylnSaOe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PWveC0IoxylnSaOe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PWveC0IoxylnSaOe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PWveC0IoxylnSaOe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
区域 B:灾备 / 本地仓库
区域 A:生产主仓库
管理复制规则
推送镜像时触发事件
执行复制任务通过 Registry API
存储镜像层
Harbor 实例 A
对象存储 / 文件系统
PostgreSQL
Harbor 实例 B
对象存储
PostgreSQL
Job Service A
复制模式:
- 推模式:源 Harbor 主动将镜像推送至目标 Harbor。适合源端触发(如新镜像推送后立刻同步)。
- 拉模式:目标 Harbor 主动从源 Harbor 拉取镜像。适合目标端定制同步策略,或源端出于安全考虑不允许入站。
触发方式:
- 事件驱动:当镜像被推送到源项目后,立即触发复制任务。
- 手动触发:管理员在 UI 中手动执行单次复制。
- 定时触发:按照 Cron 表达式周期性执行,如每天凌晨全量同步。
四、复制执行流程(时序图)
以推模式为例,当 Java 微服务的新镜像推送到主 Harbor 后,自动复制到灾备区域。
区域B 存储备 Harbor (区域B)Job Service (A)主 Harbor (区域A)CI/CD 管道区域B 存储备 Harbor (区域B)Job Service (A)主 Harbor (区域A)CI/CD 管道#mermaid-svg-NA4tRU9T6O5Z15zx{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NA4tRU9T6O5Z15zx .error-icon{fill:#552222;}#mermaid-svg-NA4tRU9T6O5Z15zx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NA4tRU9T6O5Z15zx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NA4tRU9T6O5Z15zx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NA4tRU9T6O5Z15zx .marker.cross{stroke:#333333;}#mermaid-svg-NA4tRU9T6O5Z15zx svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NA4tRU9T6O5Z15zx p{margin:0;}#mermaid-svg-NA4tRU9T6O5Z15zx .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NA4tRU9T6O5Z15zx text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-NA4tRU9T6O5Z15zx .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-NA4tRU9T6O5Z15zx .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-NA4tRU9T6O5Z15zx #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-NA4tRU9T6O5Z15zx .sequenceNumber{fill:white;}#mermaid-svg-NA4tRU9T6O5Z15zx #sequencenumber{fill:#333;}#mermaid-svg-NA4tRU9T6O5Z15zx #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-NA4tRU9T6O5Z15zx .messageText{fill:#333;stroke:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NA4tRU9T6O5Z15zx .labelText,#mermaid-svg-NA4tRU9T6O5Z15zx .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .loopText,#mermaid-svg-NA4tRU9T6O5Z15zx .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-NA4tRU9T6O5Z15zx .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-NA4tRU9T6O5Z15zx .noteText,#mermaid-svg-NA4tRU9T6O5Z15zx .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-NA4tRU9T6O5Z15zx .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NA4tRU9T6O5Z15zx .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NA4tRU9T6O5Z15zx .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NA4tRU9T6O5Z15zx .actorPopupMenu{position:absolute;}#mermaid-svg-NA4tRU9T6O5Z15zx .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-NA4tRU9T6O5Z15zx .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NA4tRU9T6O5Z15zx .actor-man circle,#mermaid-svg-NA4tRU9T6O5Z15zx line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-NA4tRU9T6O5Z15zx :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}alt[Blob 不存在][Blob 已存在]区域B仓库已有 myapp:v2.0docker push myapp:v2.0推送成功发送复制事件 (镜像已推送)匹配复制规则(项目、过滤器、目标)请求创建 Blob 上传会话比对 Blob 是否存在传输 Blob 数据存储层跳过推送 Manifest 及标签同步成功更新复制任务状态
五、复制策略与过滤配置
跨区域复制不只是全量同步,更需精细控制以减少带宽和存储成本。
#mermaid-svg-iBdn88plfgbhpHLS{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iBdn88plfgbhpHLS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iBdn88plfgbhpHLS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iBdn88plfgbhpHLS .error-icon{fill:#552222;}#mermaid-svg-iBdn88plfgbhpHLS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iBdn88plfgbhpHLS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iBdn88plfgbhpHLS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iBdn88plfgbhpHLS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iBdn88plfgbhpHLS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iBdn88plfgbhpHLS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iBdn88plfgbhpHLS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iBdn88plfgbhpHLS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iBdn88plfgbhpHLS .marker.cross{stroke:#333333;}#mermaid-svg-iBdn88plfgbhpHLS svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iBdn88plfgbhpHLS p{margin:0;}#mermaid-svg-iBdn88plfgbhpHLS .edge{stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .section–1 rect,#mermaid-svg-iBdn88plfgbhpHLS .section–1 path,#mermaid-svg-iBdn88plfgbhpHLS .section–1 circle,#mermaid-svg-iBdn88plfgbhpHLS .section–1 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section–1 text{fill:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth–1{stroke-width:17;}#mermaid-svg-iBdn88plfgbhpHLS .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-0 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-0 path,#mermaid-svg-iBdn88plfgbhpHLS .section-0 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-0 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-iBdn88plfgbhpHLS .section-0 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-0{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-0{stroke-width:14;}#mermaid-svg-iBdn88plfgbhpHLS .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-1 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-1 path,#mermaid-svg-iBdn88plfgbhpHLS .section-1 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-1 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-1 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-1{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-1{stroke-width:11;}#mermaid-svg-iBdn88plfgbhpHLS .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-2 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-2 path,#mermaid-svg-iBdn88plfgbhpHLS .section-2 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-2 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-2 text{fill:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-2{stroke-width:8;}#mermaid-svg-iBdn88plfgbhpHLS .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-3 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-3 path,#mermaid-svg-iBdn88plfgbhpHLS .section-3 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-3 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-3 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-3{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-3{stroke-width:5;}#mermaid-svg-iBdn88plfgbhpHLS .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-4 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-4 path,#mermaid-svg-iBdn88plfgbhpHLS .section-4 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-4 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-4 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-4{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-4{stroke-width:2;}#mermaid-svg-iBdn88plfgbhpHLS .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-5 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-5 path,#mermaid-svg-iBdn88plfgbhpHLS .section-5 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-5 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-5 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-5{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-5{stroke-width:-1;}#mermaid-svg-iBdn88plfgbhpHLS .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-6 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-6 path,#mermaid-svg-iBdn88plfgbhpHLS .section-6 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-6 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-6 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-6{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-6{stroke-width:-4;}#mermaid-svg-iBdn88plfgbhpHLS .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-7 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-7 path,#mermaid-svg-iBdn88plfgbhpHLS .section-7 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-7 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-7 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-7{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-7{stroke-width:-7;}#mermaid-svg-iBdn88plfgbhpHLS .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-8 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-8 path,#mermaid-svg-iBdn88plfgbhpHLS .section-8 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-8 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-8 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-8{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-8{stroke-width:-10;}#mermaid-svg-iBdn88plfgbhpHLS .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-9 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-9 path,#mermaid-svg-iBdn88plfgbhpHLS .section-9 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-9 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-9 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-9{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-9{stroke-width:-13;}#mermaid-svg-iBdn88plfgbhpHLS .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-10 rect,#mermaid-svg-iBdn88plfgbhpHLS .section-10 path,#mermaid-svg-iBdn88plfgbhpHLS .section-10 circle,#mermaid-svg-iBdn88plfgbhpHLS .section-10 polygon,#mermaid-svg-iBdn88plfgbhpHLS .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-10 text{fill:black;}#mermaid-svg-iBdn88plfgbhpHLS .node-icon-10{font-size:40px;color:black;}#mermaid-svg-iBdn88plfgbhpHLS .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .edge-depth-10{stroke-width:-16;}#mermaid-svg-iBdn88plfgbhpHLS .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iBdn88plfgbhpHLS .disabled,#mermaid-svg-iBdn88plfgbhpHLS .disabled circle,#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:lightgray;}#mermaid-svg-iBdn88plfgbhpHLS .disabled text{fill:#efefef;}#mermaid-svg-iBdn88plfgbhpHLS .section-root rect,#mermaid-svg-iBdn88plfgbhpHLS .section-root path,#mermaid-svg-iBdn88plfgbhpHLS .section-root circle,#mermaid-svg-iBdn88plfgbhpHLS .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-iBdn88plfgbhpHLS .section-root text{fill:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .section-root span{color:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .section-2 span{color:#ffffff;}#mermaid-svg-iBdn88plfgbhpHLS .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-iBdn88plfgbhpHLS .edge{fill:none;}#mermaid-svg-iBdn88plfgbhpHLS .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-iBdn88plfgbhpHLS :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Harbor 复制策略
资源过滤器
名称过滤器:如 "myapp-*"
标签过滤器:如 "release-*" 排除 "latest"
基础资源:仅同步资源级别(项目)或标签
带宽控制
限制复制速度(MB/s)
避免独占跨区域专线
覆盖策略
同名标签是否覆盖(通常开启)
触发条件
事件驱动(推送)
手动
定时
目标配置
目标 Registry 地址和凭据
目标项目名(可映射不同名)
Java 场景最佳实践:只复制生产发布标签(如 v*),不复制开发快照标签(SNAPSHOT),以节约带宽和存储。
六、与 Java 微服务部署的联动
在 Kubernetes 中,可以通过地域标签(nodeSelector/affinity)确保 Pod 调度到本地域,并配置该地域专用的 ImagePullSecret 指向本地 Harbor。
#mermaid-svg-vQjXbT7kKFgunq5t{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vQjXbT7kKFgunq5t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vQjXbT7kKFgunq5t .error-icon{fill:#552222;}#mermaid-svg-vQjXbT7kKFgunq5t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vQjXbT7kKFgunq5t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vQjXbT7kKFgunq5t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vQjXbT7kKFgunq5t .marker.cross{stroke:#333333;}#mermaid-svg-vQjXbT7kKFgunq5t svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vQjXbT7kKFgunq5t p{margin:0;}#mermaid-svg-vQjXbT7kKFgunq5t .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-vQjXbT7kKFgunq5t .cluster-label text{fill:#333;}#mermaid-svg-vQjXbT7kKFgunq5t .cluster-label span{color:#333;}#mermaid-svg-vQjXbT7kKFgunq5t .cluster-label span p{background-color:transparent;}#mermaid-svg-vQjXbT7kKFgunq5t .label text,#mermaid-svg-vQjXbT7kKFgunq5t span{fill:#333;color:#333;}#mermaid-svg-vQjXbT7kKFgunq5t .node rect,#mermaid-svg-vQjXbT7kKFgunq5t .node circle,#mermaid-svg-vQjXbT7kKFgunq5t .node ellipse,#mermaid-svg-vQjXbT7kKFgunq5t .node polygon,#mermaid-svg-vQjXbT7kKFgunq5t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vQjXbT7kKFgunq5t .rough-node .label text,#mermaid-svg-vQjXbT7kKFgunq5t .node .label text,#mermaid-svg-vQjXbT7kKFgunq5t .image-shape .label,#mermaid-svg-vQjXbT7kKFgunq5t .icon-shape .label{text-anchor:middle;}#mermaid-svg-vQjXbT7kKFgunq5t .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vQjXbT7kKFgunq5t .rough-node .label,#mermaid-svg-vQjXbT7kKFgunq5t .node .label,#mermaid-svg-vQjXbT7kKFgunq5t .image-shape .label,#mermaid-svg-vQjXbT7kKFgunq5t .icon-shape .label{text-align:center;}#mermaid-svg-vQjXbT7kKFgunq5t .node.clickable{cursor:pointer;}#mermaid-svg-vQjXbT7kKFgunq5t .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vQjXbT7kKFgunq5t .arrowheadPath{fill:#333333;}#mermaid-svg-vQjXbT7kKFgunq5t .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vQjXbT7kKFgunq5t .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vQjXbT7kKFgunq5t .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vQjXbT7kKFgunq5t .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vQjXbT7kKFgunq5t .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vQjXbT7kKFgunq5t .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vQjXbT7kKFgunq5t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vQjXbT7kKFgunq5t .cluster text{fill:#333;}#mermaid-svg-vQjXbT7kKFgunq5t .cluster span{color:#333;}#mermaid-svg-vQjXbT7kKFgunq5t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vQjXbT7kKFgunq5t .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vQjXbT7kKFgunq5t rect.text{fill:none;stroke-width:0;}#mermaid-svg-vQjXbT7kKFgunq5t .icon-shape,#mermaid-svg-vQjXbT7kKFgunq5t .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vQjXbT7kKFgunq5t .icon-shape p,#mermaid-svg-vQjXbT7kKFgunq5t .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vQjXbT7kKFgunq5t .icon-shape .label rect,#mermaid-svg-vQjXbT7kKFgunq5t .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vQjXbT7kKFgunq5t .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vQjXbT7kKFgunq5t .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vQjXbT7kKFgunq5t :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
全球 CI/CD
自动复制
自动复制
拉取镜像
拉取镜像
构建镜像
推送至区域A Harbor
Harbor 亚洲区
Harbor 欧洲区
K8s 亚洲集群
K8s 欧洲集群
亚洲节点 Pod
欧洲节点 Pod
七、跨区域复制的挑战与最佳实践
| 网络延迟与中断 | 复制任务失败,导致区域间镜像不一致。 | 配置重试机制,监控复制任务状态;使用专线或 VPN 保障连通性。 |
| 带宽成本 | 大量全量同步消耗跨地域流量。 | 利用 Blob 共享和去重,只传输缺失层;通过标签过滤减少无用复制。 |
| 一致性延迟 | 灾备端镜像可能滞后数分钟。 | 重要发布需等待复制完成后再切流量,可结合 CI 流水线验证。 |
| 安全合规 | 跨区域传输可能违反数据驻留规定。 | 使用加密传输(HTTPS),在合规区域内部署 Harbor;可配置双向复制但受控。 |
| 存储膨胀 | 多区域全量同步导致存储成本成倍增加。 | 在各区域分别设置保留策略和 GC,清理过期旧版。 |
八、思维导图总结
#mermaid-svg-duhTAcrPq07S9Zs9{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-duhTAcrPq07S9Zs9 .error-icon{fill:#552222;}#mermaid-svg-duhTAcrPq07S9Zs9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-duhTAcrPq07S9Zs9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-duhTAcrPq07S9Zs9 .marker.cross{stroke:#333333;}#mermaid-svg-duhTAcrPq07S9Zs9 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-duhTAcrPq07S9Zs9 p{margin:0;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge{stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 text{fill:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth–1{stroke-width:17;}#mermaid-svg-duhTAcrPq07S9Zs9 .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-0{stroke-width:14;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-1{stroke-width:11;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 text{fill:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-2{stroke-width:8;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-3{stroke-width:5;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-4{stroke-width:2;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-5{stroke-width:-1;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-6{stroke-width:-4;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-7{stroke-width:-7;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-8{stroke-width:-10;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-9{stroke-width:-13;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 polygon,#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 text{fill:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .edge-depth-10{stroke-width:-16;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled circle,#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:lightgray;}#mermaid-svg-duhTAcrPq07S9Zs9 .disabled text{fill:#efefef;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-root rect,#mermaid-svg-duhTAcrPq07S9Zs9 .section-root path,#mermaid-svg-duhTAcrPq07S9Zs9 .section-root circle,#mermaid-svg-duhTAcrPq07S9Zs9 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-duhTAcrPq07S9Zs9 .section-root text{fill:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-root span{color:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .section-2 span{color:#ffffff;}#mermaid-svg-duhTAcrPq07S9Zs9 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-duhTAcrPq07S9Zs9 .edge{fill:none;}#mermaid-svg-duhTAcrPq07S9Zs9 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-duhTAcrPq07S9Zs9 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
镜像跨区域复制
目标
多活部署
灾备恢复
本地加速
数据合规
方案
Harbor 远程复制
Registry 代理缓存
skopeo 同步
云服务商原生复制
复制模式
推模式
拉模式
触发方式
事件驱动
手动
定时
关键配置
资源过滤(名称/标签)
带宽限制
覆盖策略
与Java部署集成
CI推送后自动同步
K8s就近拉取
区域故障切换
挑战
网络延迟
带宽成本
一致性
安全合规
总结:镜像跨区域复制是确保全球分布式 Java 应用快速、可靠部署的关键基础设施。Harbor 等企业级仓库通过灵活的复制规则和推/拉模式,实现了自动化的异地同步,而合理的过滤策略与监控可控制成本。在面试中,能结合 Java 微服务的多区域部署需求,阐明复制架构、策略设计及挑战应对,能充分展现你的全局架构能力。





