Harbor構建私有倉庫環境部署實踐
? ? 最近項目需要用到Harbor鏡像倉庫需求,花了一些時間去研究這個產品,適用后感覺它的可視化的Web界面去管理docker鏡像操作簡易,又提供了多個項目的鏡像權限管理控制。下面把我最近學習的成果給大家分享一下,讓大家了解一下Harbor自身特性和如何部署Harbor私有倉庫。
一、Harbor背景
VMware公司去年3月開源了企業級容器Registry項目Harbor,由VMware中國研發的團隊負責開發。Harbor可幫助用戶迅速搭建企業級的registry服務,它提供了管理圖形界面,基于角色的訪問控制RBAC,鏡像遠程復制(同步),AD/LDAP集成、以及審計日志等企業用戶需求的功能,同時還原生支持中文和英文,深受國內外用戶的喜愛。許多開源社區的開發者也給Harbor項目添磚加瓦,貢獻代碼、反饋問題和提出建議。在大家共同努力下,Harbor項目推出以來,在GitHub獲得了近2000個點贊星星和500多個forks。
二、Harbor架構簡介
此圖來源:https://my.oschina.net/vmwareharbor/blog/650964
從上圖我們可以看出,Harbor系統由以下5個組件組成:
三、Harbor特性
?基于角色控制
用戶和倉庫都是基于項目進行組織的,而用戶基于項目可以擁有不同的權限。
?基于鏡像的復制策略
鏡像可以在多個Harbor實例之間進行復制(同步)。 適用于負載平衡,高可用性,多數據中心,混合和多云場景。
?支持LDAP / AD
Harbour與現有的企業LDAP / ADA集成,用于用戶認證和管理。
?圖像刪除和垃圾收集
鏡像可以被刪除并且也可以回收鏡像占用的空間。
?圖形UI
用戶可以輕松瀏覽,搜索鏡像倉庫以及對項目進行管理。
?審計
對存儲庫的所有操作都進行跟蹤。
?RESTful API
用于大多數管理操作的RESTful API,易于與外部系統集成。
?輕松部署
同時提供在線和離線安裝程序。此外還提供了用于vSphere平臺(OVA)的虛擬設備。
四、Harbor高可用設計
Registry高可用性(HA)是多數生產系統需要關心的問題,基本要求就是沒有單點故障。通常需要根據允許服務中斷的時間,以及可以承受的成本和損失,來確定采用的技術。下面介紹3種HA的方案。
1、磁盤共享負載均衡分發方案
這是一種比較標準的方案,就是多個的Registry實例共享同一個存儲,任何一個實例持久化到存儲的鏡像,都可被其他實例中讀取。通過前置負載均衡進來的請求,可以分流到不同的實例中去處理,實現了負載均衡,也避免了單點故障。
2、Harbor復制同步策略方案
這一種方案利用了Harbor鏡像復制特性,能將多個節點間采用多主復制策略來互相復制鏡像。倉庫沒有共享同一個存儲,前置采用負載均衡進來請求,只要配置好主從項目同步復制鏡像策略后鏡像會自動同步到對應Harbor實例
倉庫沒有共享同一個存儲,這種方案無法保障鏡像的一致性。即使有一個實例失效,另一個實例仍然可以提供服務,從而在一定程度上可以滿足HA的需求。
3、HA主從方案
這中方案是利用主機的HA軟件高可用來實現Harbor的HA,當節點一個Harbor節點主機故障時,HA軟件會自動切換到正常的Harbor節點,另一臺Harbor主機仍然可以提供服務,從而在一定程度上可以滿足HA的需求。
5、Harbor環境安裝
Harbor安裝有三種方式:
1.在線安裝:安裝軟件從Docker hub下載Harbour的鏡像, 因此安裝軟件包非常小。
2.離線安裝:當主機沒有外網訪問權限時,可以去Harbor官網下載離線軟件包來安裝,離線軟件包含預制鏡像,因此文件大小較大。
3.虛擬設備:如果要安裝Harbor作為vSphere集成容器(VIC)的注冊表組件,或者在vSphere平臺上將Harbor作為獨立注冊表使用,請下載OVA版本的Harbor。
這里我主要講述如何離線安裝harbor倉庫,另外還有兩種Harbor軟件安裝方式有興趣的朋友可以去參考Harbor的官方文檔來驗證。
Harbor官方地址:
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
1、下載Harbor離線軟件包
這里我們會以harbor 0.4.5版本為例來安裝,首先要去Harbor官網去下載離線軟件包harbor-offline-installer-0.4.5.tgz,然后上傳服務器解壓。
Harbor是由多個容器組成,因此需要借助docker-compose去加載docker-compose.yml工程配置文件來啟停Harbor組件容器。
2、配置Harbor
注意docker 1.10以后,使用的registry
v2鏡像倉庫,必須使用https方式來訪問。在Harbor中會有一個harbor.cfg文件,需要提前做好配置修改。
需要配置的參數如下:
hostname:私有倉庫的主機名。可以是IP地址或是域名。
ui_url_protocol:用戶訪問私倉使用的協議,默認時http,這里配置成https;
harbor_admin_password:harbor的管理員賬戶密碼,默認密碼是Harbor12345
指向正確的https證書文件目錄
3、https證書配
修改配置文件/etc/pki/tls/openssl.cnf
指定CA服務器地址為harbor倉庫服務器地址
然后執行以下命令來生成ca.crt和ca.key兩個證書文件。注意這里的CN=XXX和IP=XXX,如果Harbor用域名來訪問則XXX換成域名,如果使用的是IP訪問https訪問則配置ip,將證書文件生成到/opt/cert目錄。
mkdir –p /opt/cert
openssl req-newkey rsa:4096 -nodes -sha256 -keyout/opt/cert/ca.key \
-subj '/C=xj/O=shsnc onDocker/CN=192.168.56.106/emailAddress=harbor@shsnc.comsubjectAltName=IP=192.168.56.106'\
-x509 -days 365 -out/opt/cert/ca.crt
4、安裝并啟動Harbor
在安裝Harbor之前需要提前規劃一個比較大的存儲空間用于存儲Harbor的鏡像、數據庫和日志。以保證后續Harbor系統運行良好。
./ prepare
系統已經提前準備好一個大的文件系統/opt/harbor/data,我們需要在運行prepare后,需要修改/opt/harbor/docker-compose.yml文件中,并提前創建一些數據卷目錄:
mkdir -p /opt/harbor/data/registry
mkdir -p /opt/harbor/data/log
mkdir -p /opt/harbor/data/database
修改docker-compose.yml文件內容如下:
執行install.sh腳本安裝harbor并同時啟動harbor服務
./install.sh
此時會啟動6個docker容器,可以用docker-compose ps查看harbor組件的運行時的狀態。
?
5、客戶端訪問harbor倉庫
需要訪問Harbor倉庫的客戶端,需要復制剛生成的證書:將harbor主機上的/opt/cert/ca.crt文件,復制到客戶端宿主機上的:/etc/docker/certs.d/192.168.56.104/ca.crt
六、Harbor權限管理和鏡像復制
1.項目權限管理
角色權限分類:
項目管理員:項目管理、用戶管理、鏡像管理和復制策略等權限
開發人員:只能針對自己項目鏡像具有pull/push等權限
訪客:只能針對自己項目鏡像具有pull權限
1)給testrpo項目分配一個普通用戶xinju,角色權限為開發人員
2)通過xinju用戶登錄我們可以正常看到,testrpo項目,倉庫中有2個鏡像,權限為開發人員,只要上傳和下載權限。無刪除鏡像權限。
3)通過API給項目添加用戶權限(5代表項目testrpo)
1)、查看項目中擁有的權限
curl-u "admin:Harbor12345" -X GET -H "Content-Type:application/json" "https://192.168.56.105/api/projects/5/members/"
2)、刪除項目中用戶權限
curl-u "admin:Harbor12345" -X DELETE -H "Content-Type:application/json""https://192.168.56.105/api/projects/5/members/3"
3)、給項目testrpo分配一個xinju用戶訪問權限,并賦予開發人員角色
curl-u "admin:Harbor12345" -X POST-H "Content-Type: application/json""https://192.168.56.105/api/projects/5/members/" -d @role.json
--json文件 :roles:2代表開發人員角色,xinju代表用戶
catrole.json
{
"roles": [
2
],
"username": "xinju"
}
2.跨倉庫數據中心復制鏡像
目前Harbor支持跨數據倉庫鏡像遠程復制功能,從某種程度上滿足了鏡像倉庫HA高可用。但復制策略是以“項目”為中心, 通過管理員對具體項目的Harbor源端配置“復制策略”,標明需要復制的項目以及鏡像到harbor目標倉庫。并對它的地址和連接時使用的用戶名密碼進行設置。當復制策略被激活時,Harbor源項目下的所有鏡像,都會被復制到harbor目標倉庫;此外,當Harbor源項目下的鏡像被添加或刪除(push或delete),只要策略還在激活狀態,鏡像的變化都會同步到harbor目標倉庫上去, 如下圖所示:
以下驗證一下如何進行跨數據中心鏡像復制功能
Harbor源倉庫主機:192.168.56.105(主節點)
Harbor目標倉庫主機:192.168.56.106(從節點)
將主節點的其中一個testrpo項目中的鏡像文件同步到從節點中
1)登錄Harbor源倉庫web ui https:// 192.168.56.105,選擇testrpo項目來做鏡像同步
2)填寫需要同步的目標倉庫地址
3)開啟復制策略,看到下面的復制任務已完成
4)登錄Harbor目標倉(https://192.168.56.106)發現目標倉庫中已經同步過來了testrpo目標中有兩個鏡像文件。
5)同時也可以看到日志中鏡像復制過程中的所有操作
七、總結
1.提供可視化的Web界面方便云計算機運維工程師來管理docker鏡像,友好的操作界面使用簡單又方便。
2.提供了基于角色的訪問控制機制,并通過項目來對鏡像進行組織和訪問權限的控制,Harbor的安全機制是做的比較好。
3.支持跨數據倉庫鏡像遠程同步功能,從某種程度上可以滿足HA的需求。
4.提供詳細的RESTful API接口方便第三方開發集成。
5.Harbor是VMware中國研發的團隊負責開發社區文檔資料比較豐富。
6.Harbor系統平臺不支持鏡像文件自動清理,在平臺上刪除一些鏡像卻只是刪除了鏡像的軟鏈接,需要人工用命令去后臺清理鏡像。
7.后續會考慮如何去搭建使用Harbor高可用集群。
https://github.com/vmware/harbor
http://dockone.io/article/1640
https://my.oschina.net/vmwareharbor/blog/650964
歡迎大家關注我的微信公眾號,里面有很多相關的技術干貨,也能隨時聯系到我。謝謝!