测试环境harbor与生产harbor镜像同步过程手札

测试环境harbor与生产harbor镜像同步过程手札

前言

考虑到后面需要测试环境harbor镜像库需与生产harbor镜像库进行复制同步,以便进行快速发布流程的顺畅。

本手札记录 生产 Harbor 同步测试 Harbor 镜像过程,就自己做个记录

环境说明

  1. 测试 Harbor 内网 (192.168.111.156:443 / reg-hub.gzeport.com)
  2. 113.xxx.xxx.190:15680 (外网 L3/L4 映射192.168.111.156:443)
  3. 生产环境 可连外网虚拟机,10.196.68.159 (Nginx 反代 / L7)
  4. 生产 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)

此过程存在问题

  1. 域名冲突:生产与测试 Harbor 均使用 reg-hub.gzeport.com

  2. 生产 Harbor 容器无法访问外网,只能通过 10.196.68.159 访问测试 Harbor

  3. L3/L4 映射不足,无法修改 HTTP Header → CSRF token/Registry token 无法正常

我的这边环境有点特殊的,如果生产harbor能直连测试harbor映射外网的不需要那么复杂…..惭愧了。

解决上面问题大概过程

  1. L7 Nginx 反代(部署在 10.196.68.159)
    • 反代目标:测试 Harbor 内网 IP(192.168.111.156:443)
    • 保留 Host、Origin、Referer、X-Forwarded-* 请求头
  2. 生产 Harbor 容器 DNS 配置
    • 使用 extra_hosts 将虚拟域名解析到 L7 反代 IP(10.196.68.159)
  3. 测试 Harbor 容器 DNS 配置
    • 使用 extra_hosts 将自身域名解析到内网 IP(192.168.111.156)
  4. 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;
        }
    }

测试访问

image-20251020142215734

生产Harbor Replication 配置示例

image-20251020142032546

image-20251020142113761

总结-同步过程示意图

生产 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 的镜像库,暂时测试暂时也未影响原来拉取推送镜像。

image-20251020142840547

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇