1. 概述
Harbor是VMware公司開源的企業(yè)級Docker Registry 項目,其目標是幫助用戶迅速搭建一個 企業(yè)級的Docker Registry 服務(wù)。雖然Docker官方提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署企業(yè)自己的私有鏡像倉庫也是非常必要的。
Harbor以docker公司開源的registry為基礎(chǔ),提供了管理UI,基于角色的訪問控制(Role Based Access Control),AD/LDAP集成,以及審計日志(Auditlogging)等企業(yè)用戶需求的功能,同時還原生支持中文。
Harbor的每個組件都是以Docker容器的形式構(gòu)建的,使用docker-compose來對它進行部署;用于部署Harbor的docker-compose模板位于/usr/local/bin/harbor/docker-compose.yml(自定義);Docker harbor有可視化的web管理界面,可以方便管理Docker鏡像,又提供了多個項目的鏡像權(quán)限管理及控制功能。
1.1 harbor的優(yōu)勢:
(1)基于角色控制:有管理員與普通用戶,可賦權(quán)普通用戶,比如只能上傳和下載,可根據(jù)項目來進行操作和管理。
(2)基于鏡像的復(fù)制策略:鏡像可以在多個Harbor實例之間進行復(fù)制(同步)。
(3)支持LDAP/AD:Harbor 可以集成企業(yè)內(nèi)部有的AD/LDAP (類似數(shù)據(jù)庫的一-張表),用于對已經(jīng)存在的用戶認證和管理。
(4)鏡像刪除和垃圾回收:鏡像可以被刪除,也可以回收鏡像占用的空間。
(5)圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,搜索鏡像倉庫以及對項目進行管理。
(6)審計管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
(7)支持RESTful API:RESTful API提供給管理員對于Harbor 更多的操控,使得與其它管理軟件集成變得更容易。
(8)Harbor和docker registry的關(guān)系:Harbor實質(zhì)上是對docker registry做了封裝,擴展了自己的業(yè)務(wù)模板。
1.2 harbor的核心組件:
Harbor在架構(gòu)上主要有Proxy、 Registry、 Core services、 Database ( Harbor-db)、Log collector ( Harbor-log)、Job services六個組件。
(1)Proxy:這是一個反向代理組件;Harbor 的Registry、UI、Token 服務(wù)等組件,都處在nginx 反向代理后邊。該代理將來自瀏覽器、docker clients .的請求轉(zhuǎn)發(fā)到后端不同的服務(wù)上。
(2)Registry:負責儲存Docker 鏡像,并處理Docker push/pull 命令;由于要對用戶進行訪問控制,即不同用戶對Docker鏡像有不同的讀寫權(quán)限,Registry 會指向一個Token 服務(wù),強制用戶的每次Docker pull/push 請求都要攜帶一個合法的Token,Registry會通過公鑰對Token 進行解密驗證。
(3)Core services: Harbor的核心功能,主要提供以下3個服務(wù):
- UI (harbor-ui) :提供圖形化界面,幫助用戶管理Registry. 上的鏡像(image) ,并對用戶進行授權(quán)。
- WebHook:網(wǎng)站的一些服務(wù)功能,為了及時獲取Registry.上 image狀態(tài)變化的情況,在Registry上配置Webhook, 把狀態(tài)變化傳遞給UI模塊。
- Token 服務(wù):令牌,提供身份驗證服務(wù),負責根據(jù)用戶權(quán)限給每個Docker push/pull 命令簽發(fā)Token。 Docker 客戶端向Registry 服務(wù)發(fā)起的請求,如果不包含Token, 會被重定向到Token 服務(wù),獲得Token 后再重新向Registry 進行請求。
(4)Database (harbor-db) :為core services提供數(shù)據(jù)庫服務(wù),負責儲存用戶權(quán)限、審計日志、Docker鏡像分組信息等數(shù)據(jù)。
(5)Job services:主要用于鏡像復(fù)制,本地鏡像可以被同步到遠程Harbor實例上。
(6)Log collector (harbor-log) :負責收集其他組件的日志到一個地方。
Harbor的每個組件都是以Docker 容器的形式構(gòu)建的,因此,使用Docker Compose 來對它進行部署。通過在docker- compose . yml所在目錄中執(zhí)行docker-compose ps命令來查看。
1.3 harbor主要功能及優(yōu)勢
- 基于角色的訪問控制
用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權(quán)限。
- 基于鏡像的復(fù)制策略
鏡像可以在多個Registry實例中復(fù)制(可以將倉庫中的鏡像同步到遠程的Harbor,類似于MySQL主從同步功能),尤其適合于負載均衡,高可用,混合云和多云的場景。
- 圖形化用戶界面
用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
- 支持 AD/LDAP
Harbor可以集成企業(yè)內(nèi)部已有的AD/LDAP,用于鑒權(quán)認證管理。
- 鏡像刪除和垃圾回收
Harbor支持在Web刪除鏡像,回收無用的鏡像,釋放磁盤空間。image可以被刪除并且回收image占用的空間。
- 審計管理
所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
- RESTful API
RESTful API 提供給管理員對于Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
- 部署簡單
提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設(shè)備。
1.4 harbor的簡易架構(gòu):
如圖所示:
所有的請求都經(jīng)過proxy代理,proxy代理轉(zhuǎn)發(fā)給Core services和Registry,其中Core services包括UI界面、token令牌和webhook網(wǎng)頁服務(wù)功能,Registry主要提供鏡像存儲功能。如果要進行下載上傳鏡像,要經(jīng)過token令牌驗證然后從Registry獲取或上傳鏡像,每一次下載或上傳都會生成日志記錄,會記入Log collector,而用戶身份權(quán)限及一些鏡像語言信息會被存儲在Database中。
2. 部署環(huán)境搭建(使用云服務(wù)器部署)
2.1 卸載服務(wù)器中的舊版本docker及其安裝時自動安裝的所有包
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
#刪除docker其他沒有卸載
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P #刪除無用的相關(guān)的配置文件
sudo apt-get autoremove docker-ce-*
#刪除docker的相關(guān)配置&目錄
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker
#查看確定docker卸載完畢
docker --version
2.2 安裝最新版的docker及docker-compose
①安裝必要的系統(tǒng)工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common gnupg-agent
②安裝GPG證書
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
③寫入軟件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
④安裝Docker及其組件
sudo apt-get -y update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo apt install -y python3-pip
sudo pip3 install docker-compose
2.3 創(chuàng)建證書(如不使用域名訪問可忽略跳過此步驟)
a. 創(chuàng)建一個保存證書的目錄
mkdir -p /data/cert/
b. 生成證書頒發(fā)機構(gòu)證書(使用server.yin123.com登錄)
#生成 CA 證書私鑰
sudo openssl genrsa -out ca.key 4096
#生成 CA 證書
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.yin123.com" \
-key ca.key \
-out ca.crt
c. 生成服務(wù)器證書
#生成 CA 證書私鑰
sudo openssl genrsa -out server.yin123.com.key 4096
#生成證書簽名請求 (CSR)
sudo openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=server.yin123.com" \
-key server.yin123.com.key \
-out server.yin123.com.csr
#生成 x509 v3 擴展文件
sudo vim v3.ext
v3.ext內(nèi)容如下
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=server.yin123.com
DNS.2=yin123.com
DNS.3=server
#使用該v3.ext文件Harbor 主機生成證書
sudo openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.yin123.com.csr \
-out server.yin123.com.crt
d. 向 Harbor 和 Docker 提供證書
#將服務(wù)器證書和密鑰復(fù)制到 Harbor 主機上的 certficates 文件夾中
cp server.yin123.com.crt /data/cert/
cp server.yin123.com.key /data/cert/
#轉(zhuǎn)換crt為cert 供 Docker 使用
#Docker 守護進程將.crt文件解釋為 CA 證書,將.cert文件解釋為客戶端證書
openssl x509 -inform PEM -in server.yin123.com.crt -out server.yin123.com.cert
#將服務(wù)器證書、密鑰和 CA 文件復(fù)制到 Harbor 主機上的 Docker 證書文件夾中。必須先創(chuàng)建文件夾
mkdir -d /etc/docker/certs.d/server.yin123.com/
cp server.yin123.com.cert /etc/docker/certs.d/server.yin123.com/
cp server.yin123.com.key /etc/docker/certs.d/server.yin123.com/
cp ca.crt /etc/docker/certs.d/server.yin123.com/
#重啟docker
systemctl restart docker
3. 下載、安裝 harbor
Harbor 提供了多種安裝方式:
- 在線安裝:通過在線安裝包安裝 Harbor,在安裝過程中需要從 Docker Hub 獲取預(yù)置的 Harbor 官方組件鏡像。
- 離線安裝:通過離線安裝包安裝 Harbor,從離線安裝包中裝載所需要的 Harbor組件鏡像。
- 源碼安裝:通過編譯源碼到本地安裝 Harbor。
- 基于 Helm Chart 的安裝:通過 Helm 安裝 Harbor Helm Chart 到 Kubernetes 集群。
這里采用離線安裝,去官網(wǎng)下載想要的版本,這里以2.4.2版本為例。
a. 將下載下來的壓縮包傳到服務(wù)器中,并解壓
tar xvf harbor-offline-installer-v2.4.2.tgz
b. 復(fù)制修改配置文件
新版本的harbor配置文件已經(jīng)改為用harbor.yml而不是harbor.cfg
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改相應(yīng)參數(shù),參考下圖,根據(jù)實際情況
c. 執(zhí)行安裝腳本
sudo ./install.sh
sudo ./install.sh --with-notary --with-notary --with-trivy --with-chartmuseum
同時安裝插件Notary、Trivy 和Chart 存儲庫服務(wù)(可選)。
d. 查看組件的啟動情況
docker ps
cd 到 docker-compose.yml的目錄下docker-compose ps
e.web訪問,進行初始化
此處沒有域名,所以使用 ip 登錄
輸入之前設(shè)置的用戶名和密碼就可以登錄了!
4. 卸載
卸載harbor步驟:(針對腳本一鍵安裝)
docker-compose down #停止 docker-compose
rm -rf /data * #刪除掛載的harbor持久化數(shù)據(jù)的目錄內(nèi)容
rm -rf /opt/harbor #刪除harbor目錄
docker-compose up -d #重啟
5. 基礎(chǔ)操作使用
參考:Harbor docs | Harbor Administration
5.1 命令行登錄、拉取、上傳等基礎(chǔ)操作
命令行登錄
新建一個項目
進入項目,可以看到不同的推送命令
命令行拉取鏡像
# 登陸
docker login -u admin -p Harbor12345 http://47.97.177.130
# 下載鏡像進行測試
docker pull busybox
# 鏡像打標簽 busybox:鏡像名 hjj_test:倉庫名
docker tag busybox 47.97.177.130/hjj_test/busybox:v1
# 推送鏡像到Harbor
docker push 47.97.177.130/hjj_test/busybox:v1
# 從倉庫拉取鏡像
docker pull https://47.97.177.130/hjj_test/busybox:v1
# 查看鏡像
docker images
5.2 配置數(shù)據(jù)庫身份驗證
如果在數(shù)據(jù)庫中創(chuàng)建用戶,Harbor 會被鎖定在數(shù)據(jù)庫模式,將無法更改為其他身份驗證模式。
Harbor有2種認證方式:auth_mode 使用的身份驗證類型
db_auth——默認,憑據(jù)存儲在數(shù)據(jù)庫中
ldap——對于LDAP身份驗證,需將其設(shè)置為ldap_auth
5.3 項目創(chuàng)建權(quán)限及倉庫只讀設(shè)置
在只讀模式下,Harbor 允許docker pull 但阻止docker push和刪除存儲庫和標簽。
- 受限訪客:受限訪客沒有項目的完全讀取權(quán)限。他們可以拉取鏡像但不能推送,而且他們看不到日志或項目的其他成員。例如,管理員可以為來自不同組織的共享項目訪問權(quán)限的用戶創(chuàng)建受限訪客。
- 來賓:來賓對指定項目具有只讀權(quán)限。他們可以拉取和重新標記鏡像,但不能推送。
- 開發(fā)者:開發(fā)者擁有項目的讀寫權(quán)限。維護者:維護者擁有超越“開發(fā)者”的權(quán)限,包括掃描鏡像、查看復(fù)制作業(yè)以及刪除鏡像和掌舵圖的能力。
- ProjectAdmin:創(chuàng)建新項目時,可以分配給項目的“ProjectAdmin”角色?!癙rojectAdmin”除了讀寫權(quán)限外,還有一些管理權(quán)限,如添加和刪除成員、啟動漏洞掃描等。
- Harbor 系統(tǒng)管理員:“Harbor 系統(tǒng)管理員”擁有最多的權(quán)限。除了上述權(quán)限外,“Harbor 系統(tǒng)管理員”還可以列出所有項目、設(shè)置普通用戶為管理員、刪除用戶以及為所有鏡像設(shè)置漏洞掃描策略。公共項目“庫”也歸管理員所有。
- 匿名:當用戶未登錄時,該用戶被視為“匿名”用戶。匿名用戶無權(quán)訪問私有項目,而對公共項目具有只讀訪問權(quán)限。
5.4 配置項目配額
要對資源使用進行控制,可以為項目設(shè)置配額,限制項目可以使用的存儲容量,默認情況下,所有項目都有無限的存儲使用配額。
5.5 配置復(fù)制
復(fù)制允許用戶以拉取或推送模式在 Harbor 和非 Harbor 注冊表之間復(fù)制資源。
管理注冊表:Registries下可以列出、添加、編輯和刪除注冊表,只能刪除未被任何規(guī)則引用的注冊表。
創(chuàng)建復(fù)制規(guī)則參考:Harbor docs | Creating a Replication Rule
5.6 漏洞掃描
Harbor 通過開源項目 Trivy 提供對圖像漏洞的靜態(tài)分析,必須在安裝 Harbor 實例時啟用 Trivy(通過附加安裝選項--with-trivy)。
5.7 創(chuàng)建系統(tǒng)機器人帳戶
Harbor v2.2 引入了管理員創(chuàng)建系統(tǒng)機器人帳戶的功能,可以使用這些帳戶在 Harbor 實例中運行自動化操作。文章來源:http://www.zghlxwxcb.cn/news/detail-779907.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-779907.html
到了這里,關(guān)于Harbor 部署、操作使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!