核心是构建可控、可追溯、低延迟、带灾备闭环的跨地域分发链路,需依托Harbor事件驱动主从同步、Skopeo+对象存储补充、K8s就近拉取调度及签名校验清理机制。

用 Harbor 主从同步构建生产级主干链路
Harbor 原生支持事件驱动的 registry-to-registry 同步,适合跨云/跨 IDC 场景:
- 在华东主 Harbor 中配置复制规则,目标指向华北、深圳等从 Harbor 实例,填入地址、凭据和命名空间映射(如 prod/app → backup-prod/app)
- 触发模式设为 事件驱动:只有当新镜像 push 到主库时才自动同步,避免轮询开销;补漏或冷备可用定时执行
- 关闭 覆盖已存在镜像选项,配合带哈希的 tag(如 v1.2.3-sha256-abc)确保不可篡改;OCI Artifact 可存签名元数据
- 同步任务自带失败重试(默认 3 次)、Webhook 告警,并可在 UI 查看每层 SHA、耗时、HTTP 状态码
用 Skopeo + 对象存储做轻量可控补充
适用于无 Harbor 环境、或需精细控制同步逻辑(如只同步 prod 标签、跳过 debug 镜像):
- 用 skopeo copy 直接搬运镜像,不依赖本地 daemon,支持私有 CA(
--dest-cert-dir)、跳过 TLS 验证(测试环境)等参数 - 脚本中加 tag 过滤:例如只同步符合语义化版本的稳定版(
grep -E 'v[0-9]+\.[0-9]+\.[0-9]+$'),排除latest或dev-* - 导出为 tar 归档(
skopeo copy docker://... docker-archive:/tmp/x.tar),上传至跨地域对象存储(如阿里云 OSS、AWS S3),再由各地 registry 从该存储拉取还原——规避公网直连不稳定问题 - 用 systemd timer 替代 cron,设置
After=network-online.target,防止启动阶段网络未就绪导致失败
让容器运行时自动就近拉取镜像
同步只是第一步,关键在 Pod 启动时自动连接最近/最健康 registry:
- 在 K8s 集群中部署 registry-proxy(如 buildkitd 或自研 sidecar),根据 Pod 所在可用区(AZ)返回对应地域 registry 地址(如 harbor-cn-north.myorg.com)
- 用 CoreDNS 插件(
k8s_external)按 namespace 或 label 实现 DNS 拆分:请求 harbor.myorg.com 时,华北节点解析为华北 VIP,华南节点返回华南 IP - 结合 readiness probe 和 endpoint topology,自动剔除故障 region 的 registry 地址,形成拉取层面的健康闭环
配套保障:签名、校验与清理机制
地理冗余不能以牺牲安全和可维护性为代价:
- 启用 Docker Content Trust(DCT)或 Notary,在推送前签名镜像,所有 registry 节点只允许拉取已签名镜像
- 每个地域 registry 定期执行
garbage-collect清理无引用层,再备份——避免同步大量悬空层(docker images -f "dangling=true"可查) - 基础镜像统一标准(如强制使用
alpine:3.20或distroless),减少跨地域因基础层不一致导致的缓存失效和体积膨胀


















