• 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也一样。

  • 相关阅读:
    DroidParts 中文系列教程(基于官方教程)
    IDEA添加其他项目为库文件的方法
    IDEA 部署项目的时候出错:Jar not loaded错误
    解决IDEA导入Myclipse项目的时候没有识别为Web项目的问题
    IDEA中安装及配置SVN
    VirtualBox下设置 XP虚拟机桥接模式
    主机上设置共享文件夹供虚拟机访问
    JS的splice()方法在for循环中使用可能会遇到的坑
    Eclipse优化
    State Design Pattern
  • 原文地址:https://www.cnblogs.com/wn1m/p/11284818.html
Copyright © 2020-2023  润新知