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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容