测试环境harbor与生产harbor镜像同步过程手札
前言
考虑到后面需要测试环境harbor镜像库需与生产harbor镜像库进行复制同步,以便进行快速发布流程的顺畅。
本手札记录 生产 Harbor 同步测试 Harbor 镜像过程,就自己做个记录
环境说明
- 测试 Harbor 内网 (192.168.111.156:443 / reg-hub.gzeport.com)
- 113.xxx.xxx.190:15680 (外网 L3/L4 映射192.168.111.156:443)
- 生产环境 可连外网虚拟机,10.196.68.159 (Nginx 反代 / L7)
- 生产 Harbor 容器 (10.196.69.7 / reg-hub.gzeport.com)
网络拓扑与问题分析
生产 Harbor 容器 (10.196.69.7 / reg-hub.gzeport.com)
│
▼
10.196.68.159 (Nginx 反代 / L7)
│
▼
113.xxx.xxx.190:15680 (外网 L3/L4 映射)
│
▼
测试 Harbor 内网 (192.168.111.156:443 / reg-hub.gzeport.com)
此过程存在问题
- 域名冲突:生产与测试 Harbor 均使用
reg-hub.gzeport.com
-
生产 Harbor 容器无法访问外网,只能通过 10.196.68.159 访问测试 Harbor
-
L3/L4 映射不足,无法修改 HTTP Header → CSRF token/Registry token 无法正常
我的这边环境有点特殊的,如果生产harbor能直连测试harbor映射外网的不需要那么复杂…..惭愧了。
解决上面问题大概过程
- L7 Nginx 反代(部署在 10.196.68.159)
- 反代目标:测试 Harbor 内网 IP(192.168.111.156:443)
- 保留 Host、Origin、Referer、X-Forwarded-* 请求头
- 生产 Harbor 容器 DNS 配置
- 使用
extra_hosts
将虚拟域名解析到 L7 反代 IP(10.196.68.159)
- 使用
- 测试 Harbor 容器 DNS 配置
- 使用
extra_hosts
将自身域名解析到内网 IP(192.168.111.156)
- 使用
- Harbor Replication 配置
- Target URL 使用虚拟域名(10.196.68.159 nginx_ip)
- 配置认证用户与同步策略
同步验证过程
测试 Harbor 容器 DNS 配置
Harbor 官方的 harbor.yml
本身没有 extra_hosts
字段,需要在生成的 docker-compose.yml
添加。
services:
registry:
extra_hosts:
- "reg-hub.gzeport.com:192.168.111.156"
core:
extra_hosts:
- "reg-hub.gzeport.com:192.168.111.156"
jobservice:
extra_hosts:
- "reg-hub.gzeport.com:192.168.111.156"
portal:
extra_hosts:
- "reg-hub.gzeport.com:192.168.111.156"
生产 Harbor 容器 DNS 配置
Harbor 官方的 harbor.yml
本身没有 extra_hosts
字段,需要在生成的 docker-compose.yml
添加。
services:
registry:
extra_hosts:
- "reg-hub.gzeport.com:10.196.68.159"
core:
extra_hosts:
- "reg-hub.gzeport.com:10.196.68.159"
jobservice:
extra_hosts:
- "reg-hub.gzeport.com:10.196.68.159"
portal:
extra_hosts:
- "reg-hub.gzeport.com:10.196.68.159"
Nginx L7 反代配置(10.196.68.159)
这边的证书需要与测试环境reg-hub.gzeport.com的ssl证书一致(自签证书)
server {
listen 443 ssl;
server_name reg-hub.gzeport.com;
ssl_certificate /AppHome/nginx/conf/cert/reg-hub.gzeport.com.crt;
ssl_certificate_key /AppHome/nginx/conf/cert/reg-hub.gzeport.com.key;
location / {
# L7 反代通过 L3/L4 TCP 映射访问内网 Harbor
proxy_pass https://113.xxx.xxx.190:15680;
proxy_ssl_server_name on;
proxy_ssl_verify off;
# 保留关键请求头
proxy_set_header Host reg-hub.gzeport.com;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Origin https://reg-hub.gzeport.com;
proxy_set_header Referer $http_referer;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
}
测试访问
生产Harbor Replication 配置示例
总结-同步过程示意图
生产 Harbor 容器
│
│ DNS: reg-hub.gzeport.com → 10.196.68.159
▼
10.196.68.159 (L7 Nginx 反代)
│
│ HTTPS 转发,修改请求头 Host/Origin/Referer
▼
测试 Harbor 内网 (192.168.111.156:443)
通过以上方案,生产 Harbor 可以在 完全隔离外网的条件下,安全、稳定地同步测试 Harbor 的镜像库,暂时测试暂时也未影响原来拉取推送镜像。