项目需求:
实现Harbor的HTTPS高可用,由于Harbor 服务器配置不高,直接做HTTPS对上传下载镜像时,若docker客户端多时,会非常慢,为了提高harbor的效率,采用以下方式来解决。拓扑图:
1. 先生成证书
这里我直接使用脚本生成,若手动制作,可参考网上教程。 若要使用此脚本,需要事先安装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的离线镜像包 这个离线包是Google仓库的,需要FQ才能下载。 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 For more details, please visit . #当出现以上内容时,说明harbor安装完成了。 #打开浏览器,输入 ,开始配置Harbor的复制仓库功能 #先创建一个test1的项目。
#接着仓库管理中创建新的仓库复制目标
#创建复制管理
#这样的操作,在两台harbor服务器上都要配置,并且复制的目标分别是对方,因为客户端将镜像上传到harbor1上,harbor2要将harbor1中的新镜像复制过去,harbor2也一样。