Harbor部署

Harbor是一個(gè)用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務(wù)器,通過添加一些企業(yè)必需的功能特性,例如安全、標(biāo)識和管理等,擴(kuò)展了開源Docker Distribution。作為一個(gè)企業(yè)級私有Registry服務(wù)器,Harbor提供了更好的性能和安全。提升用戶使用Registry構(gòu)建和運(yùn)行環(huán)境傳輸鏡像的效率。

Harbor架構(gòu)

Harbor架構(gòu)

主要的特征

  • 多租戶簽名和驗(yàn)證
  • 安全和漏洞掃描
  • 身份識別和基于角色的訪問控制
  • 實(shí)例間的鏡像復(fù)制
  • 可擴(kuò)展的API和圖形用戶界面
  • 國際化(多國語音支持,含中文)

安裝步驟

  • 下載安裝包
  • 配置harbor.cfg
  • 運(yùn)行install.sh安裝并開啟harbor

下載安裝包

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
tar -zxf harbor-offline-installer-v1.7.5.tgz
cd harbor

配置harbor.cfg

這個(gè)文件包含2個(gè)部分,一個(gè)是必須參數(shù),一個(gè)是可選項(xiàng)參數(shù)
必要參數(shù):這些參數(shù)被修改,如果需要生效需要運(yùn)行install.sh才能生效;

  • hostname:需要用FQDN,這個(gè)地址是外部訪問,用于訪問portal和倉庫服務(wù);
  • ui_url_prototol:(http或者h(yuǎn)ttps,默認(rèn)是http),這個(gè)協(xié)議用于訪問Portal和token/通知服務(wù);配置https參考:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
  • db_password:postgreSQL的root密碼;
  • max_job_workers:(默認(rèn)是10),最大副本worker;
  • customize_crt:(on或者off,默認(rèn)是on),當(dāng)設(shè)置為on時(shí),prepare腳本會創(chuàng)建私鑰和根證書為了生成和驗(yàn)證倉庫的token。設(shè)置為off時(shí),需要自己提供,參照:https://github.com/goharbor/harbor/blob/master/docs/customize_token_service.md
  • ssl_cert:ssl證書的路徑,當(dāng)協(xié)議設(shè)置為https才能生效;
  • ss_cert_key:ssl私鑰,當(dāng)協(xié)議設(shè)置為https才能生效;
  • secretkay_path:為加、解密私鑰的密碼路徑;
  • log_rotate_count:在log_rotate_count次之前的文件會被刪除。假如設(shè)置為0,則老版本直接刪除,而不做日志輪回;
  • log_rotate_size:假如日志增長到log_rotate_size大小會被輪回,單位:k,M,G;
  • http_proxy:配置proxy為Clair;
  • https_proxy:配置https prozy為Clair;
  • no_proxy:不配置代理為Clair;

可選參數(shù):可選擇參數(shù)是選擇性更改,你可以保留默認(rèn)在web portal上也可以進(jìn)行修改。假如你改動了harbor.cfg,只能在首次啟動有效,再次修改將被忽略。注意:當(dāng)你選定了auth_mode后并且注冊和創(chuàng)建任何用戶在harbor,認(rèn)證模式就不能更改了。

  • Email settings:
email_server = smtp.mydomain.com
email_server_port = 25
email_identity =
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin sample_admin@mydomain.com
email_ssl = false
email_insecure = false
  • harbor_admin_password:(默認(rèn):admin/Harbor12345);
  • auth_mode:默認(rèn)是db_auth,這個(gè)認(rèn)證會存放在數(shù)據(jù)庫中。對于LDAP認(rèn)證,設(shè)置ldap_auth;注意:如果升級了版本,請和原來保持一致,不然不能登錄;
  • token_expiration:token被token服務(wù)創(chuàng)建后默認(rèn)30分鐘失效;
  • project_creation_restriction:這個(gè)標(biāo)簽用于控制哪些用戶有權(quán)限創(chuàng)建項(xiàng)目,默認(rèn)每個(gè)人都能創(chuàng)建項(xiàng)目,設(shè)置它為“adminonly”,只有admin才能創(chuàng)建項(xiàng)目;

配置存儲

默認(rèn)Harbor使用本地存儲。在生產(chǎn)環(huán)境中你可能考慮使用其他存儲,如S3,OpenStack Swift,Ceph等。

  • registry_storage_provider_name:可以是filesystem,s3,gcs,azure等,默認(rèn)是filesystem;
  • registry_storage_provider_config:逗號分割的"key:value"對,為存儲提供配置;
  • registry_custom_ca_bundle:當(dāng)使用自簽證書時(shí),需要把根證書注冊到倉庫的truststore和chart倉庫容器;

如下:

registry_storage_provider_name=swift
registry_storage_provider_config="username: admin, password: ADMIN_PASS, authurl: http://keystone_addr:35357/v3/auth, tenant: admin, domain: default, region: regionOne, container: docker_images"

安裝harbor并啟動harbor

一旦配置好harbor.cfg和存儲,你就可以開始使用install.sh腳本安裝。

  • 默認(rèn)安裝(不包含Notary/Clair服務(wù)),Clair服務(wù)集成漏洞掃描。
$sudo ./install.sh

假如安裝過程沒有任何異常,可以使用瀏覽器打開:http://域名(harbor.cfg配置的hostname),默認(rèn)使用admin/Harbor12345帳號密碼登錄。登錄后,創(chuàng)建一個(gè)項(xiàng)目,如myproject。你能使用 docker命令登錄并push鏡像。注意:默認(rèn)安裝的是使用HTTP,你需要在docker客戶端程序添加一個(gè)--insecure-registry選項(xiàng)并重啟Docker服務(wù)。

$ docker login reg.yourdomain.com             #登錄后會把密碼保存在:/root/.docker/config.json
$ docker push reg.yourdomain.com/myproject/myrepo:mytag
$ sudo ./install.sh --with-clair
  • 安裝帶有chart倉庫服務(wù)
$ sudo ./install.sh --with-chartmuseum

配置Harbor通過 HTTPS訪問

Harbor默認(rèn)不帶有任何認(rèn)證,使用HTTP訪問服務(wù),這種方式很容易配置并且運(yùn)行,適合于開發(fā)和測試環(huán)境,如果在生產(chǎn)環(huán)境,推薦啟動HTTPS。請參照鏈接:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

管理Harbor的生命周期

使用docker-compase管理,需要運(yùn)行在harbor的目錄,下面包含docker-compose.yaml(或yml)文件

  • 停止harbor服務(wù)
$ docker-compose stop
Stopping nginx             ... done
Stopping harbor-portal     ... done
Stopping harbor-jobservice ... done
Stopping harbor-core       ... done
Stopping registryctl       ... done
Stopping harbor-db         ... done
Stopping registry          ... done
Stopping redis             ... done
Stopping harbor-log        ... done
  • 啟動Harbor服務(wù)
$docker-compose start
Starting log         ... done
Starting registry    ... done
Starting registryctl ... done
Starting postgresql  ... done
Starting adminserver ... done
Starting core        ... done
Starting portal      ... done
Starting redis       ... done
Starting jobservice  ... done
Starting proxy       ... done
  • 修改Harbor配置文件生效
    為了使修改的Harbor的配置生效,需要先將停止所有存在的Harbor實(shí)例,更新harbor.cfg,再運(yùn)行prepare腳本,最后重建新的Harbor實(shí)例。
$ sudo docker-compose down -v
$ vim harbor.cfg
$ sudo prepare
$ sudo docker-compose up -d
  • 干凈的重新安裝Harbor
    首先刪除所有的Harbor容器,然后刪除Harbor的數(shù)據(jù)和鏡像數(shù)據(jù)
$ sudo docker-compose down -v
$ rm -r /data/database
$ rm -r /data/registry

管理帶有附加組建(Notary/Clair/chartmuseum)的harbor

管理命令:

$ sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml down -v
$ vim harbor.cfg
$ sudo prepare --with-notary --with-clair --with-chartmuseum
$ sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml -f ./docker-compose.chartmuseum.yml up -d

持久化數(shù)據(jù)和日志文件

默認(rèn)Harbor持久化數(shù)據(jù)在這臺主機(jī)的/data目錄,即使Harbor的容器刪除或者重建都會保持不變。另外Harbor使用rsyslog為每個(gè)容器收集日志。默認(rèn)日志文件存放在/var/log/harbor目錄,可以方便定位問題。

修改Harbor自定義的端口

  • 對于HTTP協(xié)議

    • 修改docker-compose.yml文件,將第一個(gè)80改為8888:80
      proxy:
          image: goharbor/nginx-photon:v1.6.0
          container_name: nginx
          restart: always
          volumes:
          - ./common/config/nginx:/etc/nginx:z
          ports:
          - 8888:80
          - 443:443
      
    • 修改harbor.cfg,修改hostname
      hostname = 192.168.0.2:8888
      
    • 重新部署Harbor
  • 對于HTTPS協(xié)議

    proxy:
      image: goharbor/nginx-photon:v1.6.0
      container_name: nginx
      restart: always
      volumes:
        - ./common/config/nginx:/etc/nginx:z
      ports:
        - 80:80
        - 8888:443
    
    • 修改harbor.cfg并添加8888端口
    hostname = 192.168.0.2:8888
    
    • 重新部署Harbor

性能調(diào)優(yōu)

默認(rèn)Harbor限制Clair容器占用CPU資源,為了避免過度使用CPU,可以修改docker-compose.clair.yml文件。

故障定位

  • 當(dāng)Harbor工作不正常,運(yùn)行下面命令檢查
$ sudo docker-compose ps

假如有一個(gè)容器不是UP狀態(tài),檢查這個(gè)容器的日志文件,在/var/log/harbor目錄下。

Clair不能在線更新缺陷庫(一般更新時(shí)間比較長,需要等待)

當(dāng)Harbor安裝的環(huán)境沒有外網(wǎng)訪問,Clair不能獲取到公共的缺陷庫。在這種情況下,需要管理員手動去更新缺陷庫。
解決這個(gè)思路:部署一臺Clair在外網(wǎng),讓其更新到最新的缺陷庫,然后將Postgres的2個(gè)庫導(dǎo)出,然后導(dǎo)進(jìn)內(nèi)網(wǎng)Clair即可。參照連接:https://github.com/goharbor/harbor/blob/master/docs/import_vulnerability_data.md

參考鏈接

https://docs.docker.com/engine/security/trust/content_trust/
https://coreos.com/clair/docs/2.0.1/
https://github.com/goharbor/harbor/blob/master/docs/user_guide.md
https://github.com/appc/spec
https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
https://github.com/goharbor/harbor/blob/master/docs/import_vulnerability_data.md
https://github.com/goharbor/harbor/wiki/Architecture-Overview-of-Harbor

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容