Harbor高可用
项目需求:
实现Harbor的HTTPS高可用,由于Harbor 服务器配置不高,直接做HTTPS对上传下载镜像时,若docker客户端多时,会非常慢,为了提高harbor的效率,采用以下方式来解决。
拓扑图:

1. 先生成证书
这里我直接使用脚本生成,若手动制作,可参考网上教程。
https://github.com/zhang75656/shell-tools/blob/master/gencret.sh
若要使用此脚本,需要事先安装openssl.【注意:我测试环境是ubuntu,若是CentOS需要修改openssl_conf=/etc/pki/tls/openssl.cnf配置文件的位置.】
2. 将生成的harbor服务器的证书,合并为All-in-one的pem文件, HAProxy需要这样的文件。
cat harbor.zcf.com.crt harbor.zcf.com.key > harbor.zcf.com.pem
3. 向docker客户端推送harbor证书
#复制前,需要先在docker客户端创建目录: /etc/docker/certs.d/harbor.zcf.com,
#docker会自动到这个目录下去找harbor.zcf.com这个主机的证书.
scp harbor.zcf.com.crt DockerClientIP:/etc/docker/certs.d/harbor.zcf.com/
4. 在两台harbor服务器上安装keepalived,haproxy, socat,docker-ce,docker-compose
4.1 配置haproxy,支持SSL代理
#首先要先检查 haproxy -vv 查看编译参数中是否有USE_OPENSSL=1,若有说明haproxy支持SSL
vim /etc/haproxy/haproxy.cfg
global
.....
#这是必须的选项,具体含义可参考haproxy官网.
tune.ssl.default-dh-param 2048
#这个非必须,这是后面,让keepalived监控haproxy是否正常要用到.
stats socket /run/haproxy.sock mode 600 level admin
listen harbor_6443
#这里就用到上面制作的pem文件了。
bind *:443 ssl crt /etc/haproxy/harbor.zcf.com.pem
#若要使用http代理,可开启它,注释掉https代理.
#bind *:80
mode http
#因为是内外使用,因此直接使用源地址哈希调度算法
balance source
#下面我将Harbor的HTTP端口修改为6680,这是为了测试使用http做为反向代理时,harbor是否能正常工作。
server 192.168.10.154 192.168.10.154:6680 check inter 3000 fall 3 rise 2
server 192.168.10.50 192.168.10.50:6680 check inter 3000 fall 3 rise 2
4.2 配置keepalived
vim /etc/keepalived/keepalived.conf
global_defs {
#vrrp_strict
script_user root
}
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh"
interval 2
weight 30
rise 2
fall 3
timeout 2
}
vrrp_instance harbor_vip1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 154
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass testpass
}
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_haproxy
}
unicast_src_ip 192.168.10.154
unicast_peer {
192.168.10.50
}
}
#监控haproxy的脚本:
cat /etc/keepalived/chk_haproxy.sh
#!/bin/bash
socket="/run/haproxy.scok"
echo "show info" |socat stdio $socket
if [ "$?" -ne 0 ]; then
systemctl start haproxy
sleep 1
echo "show info" |socat stdio $socket
if [ "$?" -ne 0 ];then
systemctl stop haproxy keepalived
exit 1
fi
fi
exit 0
5. 到github上下载harbor的离线镜像包
https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
这个离线包是Google仓库的,需要翻墙才能下载。
5.1 解压harbor离线包后,修改以下文件
vim docker-compose.yml
. ......
proxy:
image: goharbor/nginx-photon:v1.7.5
container_name: nginx
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
dns_search: .
ports:
- 6680:80 #将Harbor映射到宿主机的80和443端口都修改了。
#若以后肯定不会使用让docker客户端使用HTTP方式上传下载镜像,可不修改80的映射.
- 6443:443 #注意:修改Harbor监听的端口是为了避免和本机上的HAProxy监听的端口冲突,
#若HAProxy没有和harbor安装在一起,完全不需要修改!
- 4443:4443
.........
#接着修改模板文件中的token部分的端口
vim common/templates/registry/config.yml
auth:
token:
issuer: harbor-token-issuer
realm: $public_url:6680/service/token
#若上面修改了80的映射,则这里一定要修改,否则会出现
#HTTPS认证能通过,但docker客户端上传镜像就会报错, 401 (未认证)
rootcertbundle: /etc/registry/root.crt
service: harbor-registry
#然后,修改harbor.cfg文件,这是harbor提供给我们唯一的配置文件
vim harbor.cfg
hostname = 192.168.10.154
harbor_admin_password = adminpass
#这里只修改了主机名和harbor默认管理员的密码.其它可参考harbor基础部分,选择性设置。
#最后就可以启动安装harbor了.
./install.sh --with-clair #我这里启用了clair,可通过此组件,来扫描客户端上传的镜像是否存在已知漏洞。
。。。。
----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://192.168.10.50.
For more details, please visit https://github.com/goharbor/harbor .
#当出现以上内容时,说明harbor安装完成了。
#打开浏览器,输入 http://192.168.10.50 ,开始配置Harbor的复制仓库功能
#先创建一个test1的项目。

#接着仓库管理中创建新的仓库复制目标

#创建复制管理

#这样的操作,在两台harbor服务器上都要配置,并且复制的目标分别是对方,因为客户端将镜像上传到harbor1上,harbor2要将harbor1中的新镜像复制过去,harbor2也一样。
Harbor高可用的更多相关文章
- harbor高可用部署
文章转载自:https://blog.csdn.net/networken/article/details/119704025 harbor高可用简介 harbor目前有两种主流的高可用方案: 多ha ...
- harbor高可用集群配置
目录 说明 双主复制 主从同步 双主复制说明 多harbor实例共享后端存储 方案说明 环境说明 配置说明 安装redis和mysql 导入registry数据库 配置harbor 挂载nfs目录 修 ...
- Harbor高可用理论及实践(汇聚篇)
目录 一.理论概述 什么是harbor harbor要解决的问题 有了docker自带的registry为什么还要用harbor harbor的架构组件 Harbor工作原理 二.部署harbor及其 ...
- docker仓库之harbor高可用 (三)
基于上一篇部署完成了企业级仓库harbor的部署,今天我们来聊聊什么是harbor的高可用 Harbor 支持基于策略的 Docker 镜像复制功能,这类似于 MySQL 的主从同步,其可以实现不同的 ...
- harbor高可用集群搭建
高可用harbor集群搭建 一.安装部署 1.节点角色 角色 数量 名称 备注 harbor主节点 2 harbor-1 harbor-2 双主模式 haproxy 2 HA-1 HA-2 需要通过k ...
- Docker Harbor 高可用 1.7.5版本(七)
环境说明: node1 10.10.5.135 仓库 1 node2 10.10.5.136 仓库 2 node3 10.10.5.137 客户端 实验内容: Harbor 可以在两台主机之间相互同步 ...
- 014.Docker Harbor+Keepalived+LVS+共享存储高可用架构
一 多Harbor高可用介绍 共享后端存储是一种比较标准的方案,将多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取.通过前置LB组件,如Keepalived ...
- kubernetes部署高可用Harbor
前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...
- Kubernetes容器集群 - harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
随机推荐
- jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法
jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jq ...
- OpenGL 中的三维纹理操作
#define _CRT_SECURE_NO_WARNINGS #include <gl/glut.h> #include <stdio.h> #include <std ...
- 【开发笔记】- 修改tomcat默认的编码方式
tomcat8以后默认编码格式是utf-8:7之前的都是iso8859-1 如果默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找 ...
- CSS3 完善盒模型
CSS3 改善了传统盒模型结构,增强了盒子构成要素的功能,扩展了盒模型显示的方式. 改善结构:为盒子新增轮廓区: 增强功能:内容区增强 CSS 自动添加内容功能,增强内容移除.换行处理:允许多重定义背 ...
- WPE 过滤器 滤镜 用法
过滤所有数值匹配的数据包,并修改指定的bit位 打开游戏 打开WPE 附加游戏进程 选项配置 用来配置抓取发送和接收包类型 先抓取发送包,也就是游戏中主动发给服务器的包 点击开始抓包 输入喊话内容 分 ...
- fiddler模拟弱网测试
1.首先设置手机代理 设置手机代理到本机ip,端口号8888(Fiddler默认设置): 手机访问http://ip:port安装Fiddler证书 2.修改fiddler配置 勾选上后,已经开始限速 ...
- Jmeter jmeter-server.bat 无法启动
问题现象: 解决方法: 找到如下文件: 在目录\apache-jmeter-5.0\bin下,打开名为jmeter.properties的文件 找到server.rmi.ssl.disable=fal ...
- ELK提高篇之Logstash
目录 二.Logstash 2.1.安装logstash 2.2.Logstash的工作原理解析 2.3.Logstash的配置和运行 2.4.Logstash实用举例 2.5.Logstash常用插 ...
- Junit测试入门
junit测试的6大注解 @BeforeClass 最先执行,在整个测试类中只会执行一次,所以它只能声明一次,并且被它标注的方法必须声明为static @Before 可以声明多个方 ...
- Android 还可以走多久?
最近,有位知识星球的球友问我这么一个问题: 我做 Android 开发五年多时间了,但是最近总是很焦虑,看着人工智能越来越火,很担心 Android 要不行了,想问下,我现在要转行么?Android ...