DevOps之harbor

DevOps之harbor

1、 Harbor倉庫的基本介紹

  Harbor,是一個英文單詞,意思是港灣,港灣是幹什麼的呢,就是停放貨物的,而貨物呢,是裝在集裝箱中的,說到集裝箱,就不得不提到Docker容器,由於docker容器的技術正是借鑑了集裝箱的原理。因此,Harbor正是一個用於存儲Docker鏡像的企業級Registry服務。
  Harbor經過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。做爲一個企業級私有Registry服務器,Harbor提供了更好的性能和安全。提高用戶使用Registry構建和運行環境傳輸鏡像的效率。Harbor支持安裝在多個Registry節點的鏡像資源複製,鏡像所有保存在私有Registry中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。前端

1. Harbor特性:

 基於角色的訪問控制 :用戶與Docker鏡像倉庫經過「項目」進行組織管理,一個用戶能夠對多個鏡像倉庫在同一命名空間(project)裏有不一樣的權限。
 鏡像複製 : 鏡像能夠在多個Registry實例中複製(同步)。尤爲適合於負載均衡,高可用,混合雲和多雲的場景。
 圖形化用戶界面 : 用戶能夠經過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
 AD/LDAP 支持 : Harbor能夠集成企業內部已有的AD/LDAP,用於鑑權認證管理。
 審計管理 : 全部針對鏡像倉庫的操做均可以被記錄追溯,用於審計管理。
 RESTful API : RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
 部署簡單 : 提供在線和離線兩種安裝工具, 也能夠安裝到vSphere平臺(OVA方式)虛擬設備。python

2. Harbor核心組件介紹:

 Proxy:他是一個nginx的前端代理,代理Harbor的registry,UI, token等服務。
 Database:負責儲存用戶權限、審計日誌、Dockerimage分組信息等數據。
 UI:提供圖形化界面,幫助用戶管理registry上的鏡像, 並對用戶進行受權。
 jobsevice:jobsevice是負責鏡像複製工做的,他和registry通訊,從一個registry pull鏡像而後push到另外一個registry,並記錄job_log。
 Adminserver:是系統的配置管理中心附帶檢查存儲用量,ui和jobserver啓動時候回須要加載adminserver的配置。
 Registry:鏡像倉庫,負責存儲鏡像文件。
 Log:爲了幫助監控Harbor運行,負責收集其餘組件的log,供往後進行分析。
 webhook:爲了及時獲取registry 上image狀態變化的狀況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊
 token 服務:負責根據用戶權限給每一個docker push/pull命令簽發token. Docker 客戶端向Regiøstry服務發起的請求,若是不包含token,會被重定向到這裏,得到token後再從新向Registry進行請求。
DevOps之harbor
DevOps之harbor
  主要組件包括proxy,他是一個NGINX前端代理,主要是分發前端UI訪問和鏡像上傳和下載流量,上圖中經過深藍色標識;UI提供了一個web管理界面,固然還包括一個前端和後端的API,底層使用MySQL數據庫;registry是鏡像倉庫,負責存儲鏡像文件。當鏡像上傳完畢後經過took通知UI建立repository,上圖經過紅色線標識,固然registry的token認證也是經過UI組件完成的,adminserver是系統的配置管理中心附帶檢查存儲用量。UI和jobserver啓動的時候會須要加載adminserver的配置,經過灰色線標識;jobservice是負責鏡像的複製工做,他和registry通訊,從一個registry pull鏡像而後push到另外一個registry,並記錄job_log ,上圖中經過紫色線標識,log是日誌彙總組件,經過docker的log-diver把日誌彙總到一塊兒,經過淺藍色線標識。linux

3. Harbor和Registry的比較

Harbor和Registry都是Docker的鏡像倉庫,可是Harbor做爲更多企業的選擇,是由於相比較於Regisrty來講,它具備不少的優點:
 提供分層傳輸機制,優化網絡傳輸:Docker鏡像是分層的,而若是每次傳輸都使用全量文件(因此用FTP的方式並不適合),顯然不經濟。必須提供識別分層傳輸的機制,以層的UUID爲標識,肯定傳輸的對象。
 提供WEB界面,優化用戶體驗:只用鏡像的名字來進行上傳下載顯然很不方便,須要有一個用戶界面能夠支持登錄、搜索功能,包括區分公有、私有鏡像。
 支持水平擴展集羣:當有用戶對鏡像的上傳下載操做集中在某服務器,須要對相應的訪問壓力做分解。
 良好的安全機制:企業中的開發團隊有不少不一樣的職位,對於不一樣的職位人員,分配不一樣的權限,具備更好的安全性。
 Harbor提供了基於角色的訪問控制機制,並經過項目來對鏡像進行組織和訪問權限的控制。kubernetes中經過namespace來對資源進行隔離,在企業級應用場景中,經過將二者進行結合能夠有效將kubernetes使用的鏡像資源進行管理和訪問控制,加強鏡像使用的安全性。尤爲是在多租戶場景下,能夠經過租戶、namespace和項目相結合的方式來實現對多租戶鏡像資源的管理和訪問控制。nginx

4. Harbor的實現

Harbor的每一個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用於部署Harbor的Docker Compose模板位於 harbor/docker-compose.yml,打開這個模板文件,發現Harbor是由7個容器組成的:
DevOps之harbor
  nginx:nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,因此開放https的443端口,它將流量分發到後端的ui和正在docker鏡像存儲的docker registry。
  harbor-jobservice:harbor-jobservice 是harbor的job管理模塊,job在harbor裏面主要是爲了鏡像倉庫之間同步使用的。
  harbor-ui:harbor-ui是web管理頁面,主要是前端的頁面和後端CURD的接口。
  registry:registry就是docker原生的倉庫,負責保存鏡像。
  harbor-adminserver:harbor-adminserver是harbor系統管理接口,能夠修改系統配置以及獲取系統信息。
  harbor-db:harbor-db是harbor的數據庫,這裏保存了系統的job以及項目、人員權限管理。因爲本harbor的認證也是經過數據,在生產環節大多對接到企業的ldap中。
  harbor-log:harbor-log是harbor的日誌服務,統一管理harbor的日誌。經過inspect能夠看出容器統一將日誌輸出的syslog。
這幾個容器經過Docker link的形式鏈接在一塊兒,這樣,在容器之間能夠經過容器名字互相訪問。對終端用戶而言,只須要暴露proxy (即Nginx)的服務端口。git

2、Harbor的安裝和基本使用

1. Harbor的安裝

環境介紹:
DevOps之harborgithub

#①安裝docker:
yum install -y yum-utils  device-mapper-persistent-data  lvm2
#配置repository
yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

#安裝docker,這裏注意(docker的版本須要一致)好比,若是在拉去一個鏡像以後並啓動鏡像時:[root@zy harbor]#docker run -it centos echo hello world:
若是出現以下錯誤:
DevOps之harbor
或者:
DevOps之harbor
多是由於docker的版本不對:web

#這裏咱們須要將centos中自帶的docker刪除:
    [root@zy harbor]#yum remove docker-ce docker-ce-cli containerd.io
#查看docker的版本
yum list docker-ce --showduplicates | sort -r
#下載對應的版本:
[root@zy harbor]#yum remove docker-ce docker-ce-cli containerd.io
#啓動docker
[root@zy harbor]#systemctl start docker

此時在嘗試,運行一個鏡像,若是沒問題,說明docker安裝成功!!!docker

#②  安裝docker-compose
[root@zy harbor]# yum install python-pip 
[root@zy harbor]# pip install docker-compose
#測試
[root@zy harbor]# docker-compose –version
#卸載
#[root@zy harbor]#  pip uninstall docker-compose
#③安裝harbor
這裏我已經下載過了 ,使用離線安裝。
下載地址:https://github.com/vmware/harbor/releases/download 
也能夠在線安裝:
wget -P /usr/loca/src/ https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-online-installer-v1.1.1.tgz
#下載成功後:
[root@zy harbor]#  tar zxf harbor-offline-installer-v1.1.1.tgz
[root@zy harbor]# cd harbor
#修改配置文件:
•   hostname:目標主機的主機名,用於訪問UI和註冊服務。
•   ui_url_protocol:(http或https,默認爲http)用於訪問UI和令牌/通知服務的協議。
•   db_password:用於db_auth的MySQL數據庫的root密碼。
•   max_job_workers:(默認值爲3)做業服務中的最大複製工做數。
•   customize_crt:(開啓或關閉,默認爲開啓),若是此屬性開啓,在準備腳本建立註冊表的令牌生成/驗證私鑰和根證書。
•   ssl_cert:SSL證書的路徑,僅在協議設置爲https時應用。
•   ssl_cert_key:SSL密鑰的路徑,僅在協議設置爲https時應用。
•   log_rotate_count:日誌文件在被刪除以前會被輪詢log_rotate_count次數。
•   log_rotate_size:僅當日志文件大於log_rotate_size字節時纔會輪換日誌文件。
•   harbor_admin_password:管理員的初始密碼。默認用戶名/密碼爲:admin/Harbor12345。
•   auth_mode:使用的身份驗證類型。默認狀況下,它是db_auth,即憑據存儲在數據庫中。對於LDAP身份驗證,請將其設置爲ldap_auth。
#④執行安裝腳本:
[root@zy harbor]# ./install.sh

DevOps之harbor
看到以下界面表示安裝成功,此時能夠根據你設置的hostname和port訪問harbor的界面:
DevOps之harbor
這裏咱們也能夠看到harbor啓動的docker容器:
DevOps之harbor
注意:執行這條命令時,所在的目錄中必定要有:docker-compose.yml文件。數據庫

#補充命令:
#啓動Harbor  d
[root@zy harbor]#docker-compose start 
#中止Harbor  
[root@zy harbor]#docker-comose stop 
#重啓Harbor 
[root@zy harbor]#docker-compose restart

2. harbor上傳和下載鏡像的測試

1)上傳操做

#1.建立/etc/docker/daemon.json文件,在文件中指定倉庫地址
[root@zy harbor]#cat > /etc/docker/daemon.json << EOF { "insecure-registries":["hostname"] } EOF
#注意這裏的hostname是harbor.cfg配置的那個。
#2.重啓docker服務
[root@zy harbor]# systemctl daemon-reload
[root@zy harbor]# systemctl restart docker
#3.查看docker服務的本地registry
[root@zy harbor]# systemctl info

DevOps之harbor

#4.下載鏡像,上傳至本地服務
[root@zy harbor]# docker pull busybox    #下載
[root@zy harbor]# docker tag busybox 192.168.130.101/library/busybox:0.1 #修改標籤(ip/項目/名稱)
[root@zy harbor]# docker login 192.168.130.101 #登陸本身的私有倉庫
[root@zy harbor]# docker push 192.168.130.101/library/busybox:0.1    #上傳到私用倉庫

DevOps之harbor

2)下載操做

[root@zy harbor]# docker pull 192.168.130.101/library/busybox:0.1
#查看
[root@zy harbor]# docker images

DevOps之harbor

3. 操做的常見問題

遇到的問題就是Harbor我配置的是http訪問,可是docker客戶端默認都是https訪問Harbor,因此就會產生錯誤。
DevOps之harbor
遇到上面的問題表示docker默認訪問倉庫時都是使用的https協議,而咱們的倉庫配置的是http:json

#解決方法一:
#在docker啓動的配置倉庫地址添加以下內容:
--insecure-registry rgs.unixfbi.com
[root@zy harbor]#vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry rgs.unixfbi.com    #不推薦  ,反正 我使用這個連docker都起不來
#解決方法二:
#建立/etc/docker/daemon.json文件,在文件中指定倉庫地址
{ "insecure-registries":["私有倉庫的地址"] } 
#而後重啓docker就能夠了 
[root@zy harbor]#systemctl restart docker
相關文章
相關標籤/搜索