Docker私有倉庫之Harbor神器

jaymarco發表於2020-09-22

今天老jay為大家介紹一款開源的Harbor映象倉庫,它是用來管理docker映象的,映象倉庫提供了視覺化的Web介面去管理docker映象操作簡易,還能管理多個專案的映象許可權管理控制。下面我就給大家介紹一下Harbor自身特性和Harbor私有倉庫部署。

背景

VMware 公司去年3月開源了企業級容器 Registry 專案Harbor,由VMware中國研發的團隊負責開發。Harbor可幫助使用者迅速搭建企業級的 registry 服務,它提供了管理圖形介面, 基於角色的訪問控制 RBAC,映象遠端複製(同步),AD/LDAP整合、以及審計日誌等企業使用者需求的功能,同時還原生支援中文和英文,深受國內外使用者的喜愛。許多開源社群的開發者也給Harbor專案添磚加瓦,貢獻程式碼、反饋問題和提出建議。在大家共同努力下,Harbor專案推出以來,在GitHub獲得了近2000個點贊星星和500多個forks。

架構簡介


此圖來源:https://my.oschina.net/vmwareharbor/blog/650964

從上圖我們可以看出,Harbor系統由以下5個元件組成:

序號

元件

元件功能

1

Proxy

提供反向代理服務,使用者的不同請求由 Proxy 分發到後端的 UI 或者 Registry Harbor 中使用的是官方的 nginx 映象。

2

Registry

Docker 官方映象倉庫, 主要提供映象的儲存和分發功能

3

Core services

Harbor 專案的核心元件,主要提供許可權管理、審計、管理介面 UI token service 以及可供其他系統呼叫的 API 等功能

4

Database

提供資料持久化服務,採用了官方的 mysql 映象。

5

Log Collector

負責收集其他容器的日誌並進行日誌輪轉。

特性

  • 基於角色控制

使用者和倉庫都是基於專案進行組織的, 而使用者基於專案可以擁有不同的許可權。

  • 基於映象的複製策略 

映象可以在多個Harbor例項之間進行復制(同步)。 適用於負載平衡,高可用性,多資料中心,混合和多雲場景。

  • 支援LDAP / AD

Harbour與現有的企業LDAP / ADA整合,用於使用者認證和管理。

  • 影像刪除和垃圾收集

映象可以被刪除並且也可以回收映象佔用的空間。

  • 圖形UI

使用者可以輕鬆瀏覽,搜尋映象倉庫以及對專案進行管理。

  • 審計

對儲存庫的所有操作都進行跟蹤。

  • RESTful API

用於大多數管理操作的RESTful API,易於與外部系統整合。

  • 輕鬆部署

同時提供線上和離線安裝程式。此外還提供了用於vSphere平臺(OVA)的虛擬裝置。

高可用設計

Registry高可用性(HA)是多數生產系統需要關心的問題,基本要求就是沒有單點故障。通常需要根據允許服務中斷的時間,以及可以承受的成本和損失,來確定採用的技術。下面介紹3種HA的方案。

 4.1 磁碟共享負載均衡分發方案



                           

這是一種比較標準的方案,就是多個的Registry例項共享同一個儲存,任何一個例項持久化到儲存的映象,都可被其他例項中讀取。透過前置負載均衡進來的請求,可以分流到不同的例項中去處理,實現了負載均衡,也避免了單點故障。

 4.2 Harbor複製同步策略方案

這一種方案利用了Harbor映象複製特性,能將多個節點間採用多主複製策略來互相複製映象。倉庫沒有共享同一個儲存,前置採用負載均衡進來請求,只要配置好主從專案同步複製映象策略後映象會自動同步到對應Harbor例項 倉庫沒有共享同一個儲存,這種方案無法保障映象的一致性。即使有一個例項失效,另一個例項仍然可以提供服務,從而在一定程度上可以滿足HA的需求。

 4.2 HA主從方案

這種方案是利用主機的HA軟體高可用來實現Harbor的HA,當節點一個Harbor節點主機故障時,HA軟體會自動切換到正常的Harbor節點,另一臺Harbor主機仍然可以提供服務,從而在一定程度上可以滿足HA的需求。

環境安裝

Harbor安裝有三種方式:

1、 線上安裝:安裝軟體從Docker hub下載Harbour的映象, 因此安裝軟體包非常小。

2、離線安裝:當主機沒有外網訪問許可權時,可以去Harbor官網下載離線軟體包來安裝,離線軟體包含預製映象,因此檔案大小較大。

3、虛擬裝置:如果要安裝Harbor作為vSphere整合容器(VIC)的登錄檔元件,或者在vSphere平臺上將Harbor作為獨立登錄檔使用,請下載OVA版本的Harbor

這裡我主要講述如何離線安裝harbor倉庫,另外還有兩種Harbor軟體安裝方式有興趣的朋友可以去參考Harbor的官方文件來驗證。

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以後,使用的registryv2映象倉庫,必須使用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 on  Docker/CN=192.168.56.106/emailAddress=harbor@shsnc.com  subjectAltName=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 

許可權管理和映象複製

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代表使用者

cat  role.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://my.oschina.net/vmwareharbor/blog/650964


有需要的朋友可以關注我的公眾號,文章每日一更


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章