harbor 不原生支持 p2p 分发,需通过外部集成 dragonfly 实现镜像拉取加速;部署 dragonfly 服务端(manager/scheduler/dfdaemon)、客户端配置 dfdaemon 代理、修改 containerd 镜像源指向本地 dfdaemon,并启用镜像签名与校验以保障传输安全。

Harbor 本身不原生支持 P2P 分发(如 BitTorrent、KadNode 或 Dragonfly 等),它是一个符合 OCI 规范的企业级容器镜像仓库,核心能力聚焦于权限控制、漏洞扫描、复制策略和 Web UI。要实现“P2P 加速下载”,必须在 Harbor 外部叠加一层 P2P 下载网络,典型方案是集成 Dragonfly(阿里开源,CNCF 毕业项目)或 Uber Kraken。以下以生产中更成熟、文档更全的 Dragonfly 为例,说明如何在 Linux 上配置 Harbor + Dragonfly 实现镜像拉取的 P2P 加速。
1. 部署 Dragonfly 服务端(dfdaemon + dfget + manager)
Dragonfly 架构含三部分:manager(中心元数据+调度)、scheduler(任务分发与 Peer 发现)、dfdaemon(每个节点运行的 P2P 客户端代理)。推荐用 Docker Compose 快速启动最小集群:
- 在一台 Linux 主机(如 192.168.10.100)克隆官方示例:
git clone https://github.com/dragonflyoss/deployment.git && cd deployment/docker-compose - 修改
.env设置监听地址(如DF_SCHEDULER_HOST=192.168.10.100)和 Harbor 地址(HARBOR_ADDR=harbor.example.com:443) - 执行
docker-compose up -d启动 manager、scheduler 和 redis - 确认 scheduler 健康:
curl http://192.168.10.100:8002/api/v1/schedulers应返回 JSON 列表
2. 在所有客户端节点安装并配置 dfdaemon
dfdaemon 是驻留进程,拦截容器运行时(如 containerd)的镜像拉取请求,自动转为 P2P 下载。以 Ubuntu 22.04 + containerd 为例:
- 下载最新 dfdaemon:
wget https://github.com/dragonflyoss/client/releases/download/v2.1.1/dfdaemon_2.1.1_linux_amd64.tar.gz - 解压并安装:
tar -xzf dfdaemon_*.tar.gz && sudo cp dfdaemon /usr/local/bin/ - 创建配置文件
/etc/dragonfly/dfdaemon.yaml,关键项包括:scheduler:<br> addr: 192.168.10.100:8002<br>proxy:<br> defaultFilter: "X-Dragonfly-Tag"<br> rules:<br> - regExp: "^harbor\.example\.com.*"<br> useHTTPS: true<br> cert: "/etc/ssl/certs/harbor-ca.crt"
(若 Harbor 启用自签证书,需将 CA 放入 cert 字段) - 启用服务:
sudo systemctl enable --now dfdaemon
3. 配置 containerd 使用 dfdaemon 代理
修改 /etc/containerd/config.toml,在 [plugins."io.containerd.grpc.v1.cri".registry] 下添加:
- 配置镜像重写规则,将 Harbor 请求转发给 dfdaemon:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.example.com"]<br> endpoint = ["http://127.0.0.1:65001"]
(dfdaemon 默认监听 65001,作为本地 HTTP 代理) - 确保
containerd已加载 cri 插件:sudo systemctl restart containerd - 验证是否生效:
crictl pull harbor.example.com/project/nginx:1.25—— 查看dfdaemon日志:journalctl -u dfdaemon -f,应出现"download from source" → "download from peers"流程
4. Harbor 端无需改造,但建议开启镜像签名与校验
Dragonfly 不修改 Harbor 存储逻辑,所有镜像仍由 Harbor 提供源数据。为保障 P2P 传输完整性,推荐:
- 在 Harbor 后台启用 Notary(内容信任),对推送的镜像打签名:
docker push harbor.example.com/project/app:v1后执行notary sign harbor.example.com/project/app v1 - 在 client 节点配置 containerd 的
imagePullPolicy为Always,并启用content-trust(通过DOCKER_CONTENT_TRUST=1环境变量或 daemon.json) - dfdaemon 会自动校验每一块(piece)SHA256,与 Harbor manifest 中 digest 一致才写入本地存储,杜绝中间篡改
整个链路为:containerd → dfdaemon(本地代理)→ scheduler(发现 peer)→ 其他节点 dfdaemon(提供 piece)或 fallback 到 Harbor 源。首次拉取走 Harbor,后续节点拉同一镜像时,自动从局域网内已有副本的节点下载 layer,带宽占用下降 60%~90%,尤其适合 CI/CD 流水线或大规模 K8s 集群。不复杂但容易忽略的是证书信任和 containerd 镜像 endpoint 重写——这两步配错会导致静默回退到直连 Harbor。











