Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南

实验环境

Ubuntu22.04操作系统

registry节点 10.0.0.91

master节点 10.0.0.92

backup节点 10.0.0.93

在企业信息化建设的不同演进阶段,私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目,成功实现Docker Registry至Harbor企业级镜像仓库的平滑迁移。本次技术实践采用基于Harbor的高可用架构设计,同时构建跨数据中心的镜像同步机制,现就架构方案与实施要点进行技术复盘。本文重点剖析Harbor的集群化部署方案、多副本数据一致性保障策略,以及跨云环境镜像同步的最佳实践。

Registry与Harbor功能矩阵对比图

功能模块Docker RegistryHarbor
权限控制基础HTTP认证RBAC角色体系、项目级权限
漏洞扫描不支持集成Trivy/Clair、CVE数据库
镜像同步需第三方工具多策略跨集群复制
高可用架构依赖外部存储内置PostgreSQL集群、Redis哨兵
存储后端本地/对象存储支持S3/OSS/NFS/Ceph
操作审计完整操作日志记录与追溯
Helm Chart管理不支持独立Chart仓库服务
镜像签名需手动配置Notary服务集成
GC机制手动触发策略化自动回收+空间监控

通过Harbor的企业级镜像治理能力,企业可构建从开发环境到生产环境的可信镜像流水线,将镜像安全管控节点左移,实现漏洞早发现、风险早阻断。在大规模迁移场景中,合理运用Harbor的智能化GC与分布式复制能力,可使PB级仓库迁移效率提升300%以上,为云原生转型提供坚实基础设施保障。

一、Registry镜像仓库迁移至Harbor

1. 查看现有Registry镜像列表
通过API接口获取当前Registry仓库中的所有镜像:

curl http://10.0.0.91:5000/v2/_catalog

2. Harbor仓库复制配置
登录Harbor管理界面

  •  创建目标项目

    进入"项目" → "新建项目",输入项目名称(如library),选择公开或私有。

  •  配置复制规则

    导航至"复制管理" → "新建复制规则":

    • 名称:registry-migration
    • 复制模式:Push(从Registry推送至Harbor )
    • 源仓库:选择Registry类型,填写地址http://10.0.0.91:5000
    • 目标项目:选择刚创建的项目(如library
    • 触发模式:选择"手动触发"(首次迁移建议手动)

  •  执行镜像同步

    在复制规则列表中找到新建规则,点击"执行"按钮启动迁移。任务状态可在"任务日志"中查看。

  


二、Harbor高可用集群部署

1. 双节点Harbor部署
以10.0.0.92(主)和10.0.0.93(备)为例

 配置文件呈现

[root@elk93 ~]# vim /usr/local/harbor/harbor.yml
...
hostname: 10.0.0.93
...
## https related config                               
#https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
#  # enable strong ssl ciphers (default: false)
#  # strong_ssl_ciphers: false...
harbor_admin_password: 1   
...
data_volume: /data/harbor       
...本文简单修改了四处配置文件,并且将HTTPS给注释掉,因为我在测试环境还原了步骤,没有证书了。。。。
# 在两节点执行以下操作
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
tar zxf harbor-offline-installer-v2.7.0.tgz -C /usr/local/
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml  # 修改hostname和端口配置
./install.sh    # 启动Harbor

 Keepalived实现VIP漂移

# 两个节点安装keepalived服务apt install -y keepalived


主备节点配置差异点:

主节点(10.0.0.92)配置

# 修改配置文件
92节点的master
[root@elk92 ~]# cat /etc/keepalived/keepalived.conf 
# /etc/keepalived/keepalived.conf(主节点:10.0.0.92)
global_defs {router_id 10.0.0.92  # 必须唯一,建议用本机IP
}vrrp_script chk_nginx {script "killall -0 nginx"  # 检查Nginx进程是否存在interval 2                 # 每隔2秒检查一次weight -20                 # 检查失败时,优先级降低20
}vrrp_instance VI_1 {state MASTER              # 主节点角色interface ens33           # 网卡名称(需根据实际网卡名修改)virtual_router_id 251     # 虚拟路由ID(主从必须一致)priority 100              # 初始优先级(必须高于从节点)advert_int 1              # 主备同步检查间隔(秒)mcast_src_ip 10.0.0.92    # 本机IP(必须为本机真实IP)# 注释或删除 nopreempt 以启用抢占模式# nopreempt               # 主节点恢复后会自动抢回VIPauthentication {auth_type PASS        # 认证类型auth_pass yinzhengjie # 密码(主从必须一致)}track_script {chk_nginx            # 绑定健康检查脚本}virtual_ipaddress {10.0.0.66            # 虚拟IP(VIP)}
}

备节点(10.0.0.93)配置:

93节点的backup
[root@elk93 /usr/local/harbor]# cat /etc/keepalived/keepalived.conf 
# /etc/keepalived/keepalived.conf(从节点:10.0.0.93)
global_defs {router_id 10.0.0.93  # 必须唯一,建议用本机IP
}vrrp_script chk_nginx {script "killall -0 nginx"interval 2weight -20
}vrrp_instance VI_1 {state BACKUP             # 从节点角色interface ens33virtual_router_id 251    # 必须与主节点一致priority 90              # 初始优先级低于主节点advert_int 1mcast_src_ip 10.0.0.93   # 本机IP(必须为本机真实IP)authentication {auth_type PASSauth_pass yinzhengjie}track_script {chk_nginx}virtual_ipaddress {10.0.0.66}
}访问测试:
http://10.0.0.66现在的VIP就在93上面,我们实现VIP漂移
[root@elk93 ~]# systemctl stop keepalived.service 

再次刷新

现在可以看到harbor的节点变成了92节点的信息

3. Nginx反向代理配置
在独立节点(如10.0.0.91)部署:

upstream harbor_cluster {server 10.0.0.66:80;
}server {listen 80;server_name harbor.yourdomain.com;location / {proxy_pass http://harbor_cluster;proxy_set_header Host $host;}
}

访问测试,这里只需要在Windows的hosts解析一下即可,模拟一下域名。 

4. 最终架构验证

  • 访问测试:http://harbor.yourdomain.com
  • VIP漂移测试:
再次测试keepalived
[root@elk92 ~]# systemctl stop keepalived.service 
[root@elk92 ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:ca:88:8d brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 10.0.0.92/24 brd 10.0.0.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feca:888d/64 scope link valid_lft forever preferred_lft forever
[root@elk92 ~]# 这时候已经漂移到93节点
[root@elk93 ~]# ip a |grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000inet 10.0.0.93/24 brd 10.0.0.255 scope global ens33inet 10.0.0.66/32 scope global ens33
再次刷新页面
可以发现数据已经变回了93节点的


三、主从harbor镜像数量同步一致

这时候我们的高可用架构已经搭建完成了,我们只需要同步一下两个harbor的镜像仓库的镜像数量就可以了

等待一分钟,成功即可

四、实现HTTPS证书安全访问

Harbor私有镜像仓库HTTPS深度配置指南:自签名证书与权威CA双实战


引言

在容器化技术普及的今天,Harbor作为企业级私有镜像仓库,其安全传输机制尤为重要。本文深入讲解两种HTTPS配置方案:基于自签证书的快速部署方案与生产级权威CA证书方案,助您构建安全的容器镜像管理体系。


方案选型指南

特性自签证书方案权威CA证书方案
适用场景测试/内部环境生产环境
证书信任需手动配置客户端信任浏览器/Docker自动信任
安全性基础安全企业级安全
维护成本低(无需购买)中(需续费管理)
部署复杂度简单中等

自签名证书实战方案

1. 基础环境构建
# 传输安装包到目标主机
scp harbor-offline-installer-v2.12.2.tgz oldboyedu-autoinstall-docker-docker-compose.tar.gz 10.0.0.250:~# 安装Docker生态
tar xf oldboyedu-autoinstall-docker-docker-compose.tar.gz
./install-docker.sh i
tar xf harbor-offline-installer-v2.12.2.tgz -C /usr/local/
2. CA证书链构建
# 生成CA根证书(有效期10年)
openssl genrsa -out ca/ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=oldboyedu.com" \-key ca/ca.key \-out ca/ca.crt# 生成服务端证书(含SAN扩展)
openssl genrsa -out harbor-server/harbor250.key 4096
openssl req -sha512 -new -subj "/.../CN=harbor250.oldboyedu.com" -key harbor-server/harbor250.key -out harbor-server/harbor250.csrcat > harbor-server/v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = DNS:harbor250.oldboyedu.com
EOFopenssl x509 -req -sha512 -days 3650 -extfile harbor-server/v3.ext \-CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \-in harbor-server/harbor250.csr \-out harbor-server/harbor250.crt
3. Harbor服务配置
# harbor.yml核心配置
hostname: harbor250.oldboyedu.com
https:certificate: /usr/local/harbor/certs/harbor-server/harbor250.crtprivate_key: /usr/local/harbor/certs/harbor-server/harbor250.key
harbor_admin_password: StrongPassword@2024
data_volume: /data/harbor  # 建议挂载独立存储卷
4. 客户端信任配置
# 分发CA根证书
mkdir -p /etc/docker/certs.d/harbor250.oldboyedu.com/
scp harbor250:/usr/local/harbor/certs/ca/ca.crt /etc/docker/certs.d/harbor250.oldboyedu.com/# 验证登录
docker login -u admin -p StrongPassword@2024 harbor250.oldboyedu.com

权威CA证书生产方案

1. 证书准备流程
  1. 在云平台(Let's Encrypt/付费CA)申请域名证书
  2. 获取证书包(通常包含domain_bundle.crtdomain.key
2. 证书部署规范
# 证书存放规范
/usr/local/harbor/
└── harbor.yinzhengjie.com_nginx/├── harbor.yinzhengjie.com_bundle.crt  # 证书链文件└── harbor.yinzhengjie.com.key         # 私钥文件
3. 关键配置项
# harbor.yml HTTPS配置段
https:certificate: /usr/local/harbor/harbor.yinzhengjie.com_nginx/harbor.yinzhengjie.com_bundle.crtprivate_key: /usr/local/harbor/harbor.yinzhengjie.com_nginx/harbor.yinzhengjie.com.key
4. 服务重载命令
# 完整更新流程
./prepare --with-trivy --with-chartmuseum  # 按需添加组件
./install.sh --with-notary --with-trivy    # 组合安装参数

深度运维技巧

1. 证书管理规范
  • 权限控制:chmod 600 *.key
  • 定期巡检:建立证书到期提醒机制
  • 更新策略:
    # 证书热更新流程
    mv new_cert.crt /usr/local/harbor/certs/harbor-server/
    docker-compose -f /usr/local/harbor/docker-compose.yml down
    docker-compose -f /usr/local/harbor/docker-compose.yml up -d
    
2. 跨平台客户端配置

Windows Docker Desktop:

  1. 将CA证书导入"受信任的根证书颁发机构"
  2. 重启Docker服务

Kubernetes集群配置:

# 在containerd配置中添加信任
[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs."harbor250.oldboyedu.com".tls]ca_file = "/etc/containerd/certs.d/harbor250/ca.crt"

故障排查矩阵

故障现象排查方向解决命令/方法
x509: certificate signed by ...1. 检查客户端证书路径
2. 验证证书链完整性
openssl verify -CAfile ca.crt server.crt
503 Service Unavailable1. 检查docker-compose状态
2. 查看端口冲突
docker-compose ps
netstat -tlnp
登录成功但推送失败1. 项目权限检查
2. 存储空间检查
df -h
Harbor控制台审计日志

结语

通过本文两种HTTPS配置方案的对比实施,开发者可根据实际环境需求灵活选择。建议开发测试环境采用自签证书快速搭建,生产环境务必使用权威CA证书并建立完善的证书生命周期管理体系。定期检查Harbor官方安全公告,保持服务更新至最新稳定版本。

延伸阅读:

  • Harbor官方HTTPS最佳实践
  • Let's Encrypt免费证书申请指南
  • 企业级证书管理方案Keycloak集成实践

五、生产环境注意事项

  1. 存储一致性
    建议使用共享存储(如NFS/CEPH)挂载/data目录,确保双节点数据一致。

  2. 数据库高可用
    Harbor默认使用本地PostgreSQL,生产环境建议改用外部MySQL集群。

  3. 证书配置
    为Harbor和Nginx配置HTTPS证书,提升安全性:

    # 在Harbor节点生成证书
    openssl req -x509 -newkey rsa:4096 -nodes -days 365 \-keyout /etc/nginx/ssl/harbor.key \-out /etc/nginx/ssl/harbor.crt
    
  4. 监控告警
    集成Prometheus监控关键指标:

    • 容器健康状态
    • 镜像同步延迟
    • 存储空间使用率

附录:Harbor复制触发模式详解

模式适用场景配置建议
手动触发数据初始化、临时同步结合脚本批量操作
定时触发跨地域定期备份Cron表达式设置非峰值时段
事件触发生产环境实时同步限制并发防止任务堆积
失败重试网络抖动后的数据修复设置最大重试次数(建议3-5次)

通过本文方案,可实现企业级镜像仓库的无缝迁移与高可用保障,支撑容器化业务的稳定运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39948.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】pillow库学习笔记3-Image.mode

提取颜色通道时&#xff0c;偶然换了个图片&#xff0c;结果在在运行代码时一直报错&#xff1a; from PIL import Image im Image.open(city2.png) r,g,b im.split() om Image.merge("RGB", (b,g,r)) om.save(cBGR.jpg)Traceback (most recent call last): File…

PDF打开密码教程:让您的文档更安全

在数字化办公时代&#xff0c;PDF 文件常包含敏感信息&#xff0c;这时候&#xff0c;给PDF文件设置打开密码就成了一种有效的保护措施。这样&#xff0c;只有输入正确密码的人才能查看内容&#xff0c;大大提高了文件的安全性。如果您对这方面不清楚&#xff0c;就来看看小编分…

SOFAActs 介绍-01-白盒测试框架 overview

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

Snipaste软件出现测量像素不准的问题

最近写一些前端布局的时候发现使用snipaste测量dom元素大小的时候出现和实际不符的情况。我平时写代码的时候是笔记本和一个显示屏&#xff0c;在笔记本上测量的时候发现总是和实际大小不符合&#xff0c;而在显示屏上测量的时候却并无差错&#xff0c;真是奇了怪了。 后来发现…

笔试专题(三)

文章目录 字符串中找出连续最长的数字串题解代码 拼三角题解代码 字符串中找出连续最长的数字串 题目链接 题解 1. 考察双指针 模拟 2. 算法思路&#xff1a;给定一个i 0&#xff0c;让i&#xff0c;如果遇到数字字符就创建一个变量j i&#xff0c;让j去遍历&#xff0c…

基于vue.js开发的家庭装修管理系统开发与设计(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本家庭装修管理系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Node.js语言进行编写&#xff0c;使用了VUE框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。用户的功能包括&#xff1a;注册、登录、浏览首页…

NAT网络地址转换与内网穿透

一、背景 前一篇文章提到PCDN&#xff0c; 也就是p2p技术CDN技术进行融合。 P2P技术有利于文件的快速分发。我们的CDN在控制节点分发数据的时候&#xff0c;向边缘节点传输数据&#xff0c;也是一种分发&#xff0c;还有各边缘节点强制同步数据等等&#xff0c;如果结合P2P技术…

【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画

以下是一份逐步拆解教程&#xff0c;带你从零理解并复刻这个牛顿摆&#xff08;Pendulum of Newton&#xff09;动画效果&#xff0c;这是一个经典的物理演示模型&#xff0c;现在通过纯 HTML 和 CSS 实现出来&#xff0c;视觉效果炫酷、结构简洁。 &#x1f3af; 动画效果说明…

Chat2DB:一款强大的数据库管理工具,AI助力高效查询与分析

AI技术可谓是日新月异&#xff0c;其已经融入到社会的方方面面&#xff0c;今天就给大家分享一款数据库SQL客户端工具&#xff1a;Chat2DB。 1 简介 Chat2DB是一款开源的数据库管理工具&#xff0c;集成了AI 智能辅助功能&#xff0c;支持自然语言生成 SQL&#xff0c;帮助开发…

安全上网沙箱:多方面解决政企私的上网问题

在数字化的浪潮中&#xff0c;网络已成为我们工作与生活不可或缺的一部分。然而&#xff0c;网络的便捷也伴随着诸多安全隐患&#xff0c;尤其是对于企业、个人以及政企机构而言&#xff0c;安全上外网成为了至关重要的课题。 隔离保护&#xff1a;构建安全堡垒 沙箱技术在内网…

【react18】react项目使用mock模拟后台接口

前后端分离项目&#xff0c;后端还没有接口的时候&#xff0c;前端可以使用mockjs的技术实行假数据的模拟。这里使用的是mock的库msw实现这个业务. MSW msw是mock的工具&#xff0c;官网地址是在这里 使用步骤 1.安装msw npm install mswlatest --save-dev2.新建存放mock接…

2、pytest核心功能(进阶用法)

目录 1、标记&#xff08;Markers&#xff09;&#xff1a; 自定义插件 内置标记 2、夹具&#xff08;Fixtures&#xff09;&#xff1a; 夹具得用法 夹具作用域 3、钩子&#xff08;hook&#xff09;&#xff1a; 这篇是最重要的 测试文件中需要用到的 总的来说 有以下…

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…

【2025】基于springboot+vue的医院在线问诊系统设计与实现(源码、万字文档、图文修改、调试答疑)

基于Spring Boot Vue的医院在线问诊系统设计与实现功能结构图如下&#xff1a; 课题背景 随着互联网技术的飞速发展和人们生活水平的不断提高&#xff0c;传统医疗模式面临着诸多挑战&#xff0c;如患者就医排队时间长、医疗资源分配不均、医生工作压力大等。同时&#xff0c;…

报错 standard_init_linux.go:228: exec user process caused: exec format error

docker logs 容器名 报错&#xff1a; standard_init_linux.go:228: exec user process caused: exec format error 或者 standard_init_linux.go:228: exec user process caused: input/output error 排查思路 1、检查源镜像的框架是否正确&#xff0c;是否amd64&#x…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义&#xff08;了解即可&#xff09; 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

机器学习(八)

一&#xff0c;基于协同过滤的推广算法&#xff1a; 算法原理&#xff1a; 基于用户的协同过滤(计算用户相似度→找出相似用户→根据相似用户的喜好推荐物品) 基于物品的协同过滤(计算物品相似度→找出用户喜欢的物品→推荐相似物品) 构造矩阵进行分解(将用户-物品评分矩阵分解…

云原生算力引擎:分布式推理的流体动力学

引言&#xff1a;算力黑洞的引力扰动 OpenAI推理集群日处理4.5亿次请求&#xff0c;CUDA 12.3实现μs级张量切换。特斯拉Dojo超算芯片间延迟0.5ns&#xff0c;阿里巴巴PAI平台节省58%训练时长。HuggingFace模型库下载量突破3亿次&#xff0c;AWS Inferentia芯片能效比提升8倍。…

流量分析2

一&#xff0c;webshell流量 [GKCTF 2021]签到 先看协议分级&#xff0c;大部分是tcp&#xff0c;里面有http的基于的行文本数据占了很大的比重&#xff0c;看看里面有什么 过滤http的流量 点击一条流量&#xff0c;里面的内容进去后面有基于行的文本数据&#xff0c; 先解he…

解锁智能协作:蓝耘平台如何打破应用壁垒,实现无缝联动

在当今快速发展的数字化时代&#xff0c;企业面临着越来越复杂的应用架构与系统集成挑战。传统的孤立系统已无法满足现代企业对于高效协作与数据共享的需求&#xff0c;因此&#xff0c;如何实现不同应用系统间的无缝联动&#xff0c;成为了数字化转型的关键课题。蓝耘平台作为…