Harbor構建私有倉庫環境部署實踐

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

歡迎大家關注我的微信公眾號,里面有很多相關的技術干貨,也能隨時聯系到我。謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容