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也一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM