【Harbor】用Harbor搭建docker 私有鏡像倉(cāng)庫

一、 實(shí)驗(yàn)背景

docker中要使用鏡像,一般會(huì)從本地、docker Hup公共倉(cāng)庫和其它第三方公共倉(cāng)庫中下載鏡像,一般出于安全和外網(wǎng)(墻)資源下載速率的原因考慮企業(yè)級(jí)上不會(huì)輕易使用。

那么有沒有一種辦法可以存儲(chǔ)自己的鏡像又有安全認(rèn)證的倉(cāng)庫呢??

?企業(yè)級(jí)環(huán)境中基于Harbor搭建自己的安全認(rèn)證倉(cāng)庫。

Harbor是VMware公司最近開源的企業(yè)級(jí)Docker Registry項(xiàng)目, 其目標(biāo)是幫助用戶迅速搭建一個(gè)企業(yè)級(jí)的Docker registry服務(wù)。

*提供了管理UI

*基于角色的訪問控制(Role Based Access Control)

*AD/LDAP集成

*審計(jì)日志(Audit logging)

*原生支持中文

二、 相關(guān)介紹

Harbor在架構(gòu)上主要由五個(gè)組件構(gòu)成:

*Proxy:Harbor的registry, UI, token等服務(wù),通過一個(gè)前置的反向代理統(tǒng)一接收瀏覽器、Docker客戶端的請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給后端不同的服務(wù)。

*Registry: 負(fù)責(zé)儲(chǔ)存Docker鏡像,并處理docker push/pull 命令。由于我們要對(duì)用戶進(jìn)行訪問控制,即不同用戶對(duì)Docker image有不同的讀寫權(quán)限,Registry會(huì)指向一個(gè)token服務(wù),強(qiáng)制用戶的每次docker pull/push請(qǐng)求都要攜帶一個(gè)合法的token, Registry會(huì)通過公鑰對(duì)token 進(jìn)行解密驗(yàn)證。

*Core services: 這是Harbor的核心功能,主要提供以下服務(wù):

*UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 并對(duì)用戶進(jìn)行授權(quán)。

*webhook:為了及時(shí)獲取registry 上image狀態(tài)變化的情況, 在Registry上配置webhook,把狀態(tài)變化傳遞給UI模塊。

*token 服務(wù):負(fù)責(zé)根據(jù)用戶權(quán)限給每個(gè)docker push/pull命令簽發(fā)token. Docker 客戶端向Registry服務(wù)發(fā)起的請(qǐng)求,如果不包含token,會(huì)被重定向到這里,獲得token后再重新向Registry進(jìn)行請(qǐng)求。

*Database:為core services提供數(shù)據(jù)庫服務(wù),負(fù)責(zé)儲(chǔ)存用戶權(quán)限、審計(jì)日志、Docker image分組信息等數(shù)據(jù)。

*Log collector:為了幫助監(jiān)控Harbor運(yùn)行,負(fù)責(zé)收集其他組件的log,供日后進(jìn)行分析。

各個(gè)組件之間的關(guān)系如下圖所示:

Harbor的每個(gè)組件都是以Docker容器的形式構(gòu)建的,所以使用Docker Compose來對(duì)它進(jìn)行部署。

用于部署Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml. 打開這個(gè)模板文件,會(huì)發(fā)現(xiàn)Harbor由5個(gè)容器組成:

*proxy: 由Nginx 服務(wù)器構(gòu)成的反向代理。

*registry:由Docker官方的開源registry 鏡像構(gòu)成的容器實(shí)例。

*ui: 即架構(gòu)中的core services, 構(gòu)成此容器的代碼是Harbor項(xiàng)目的主體。

*mysql: 由官方MySql鏡像構(gòu)成的數(shù)據(jù)庫容器。

*log: 運(yùn)行著rsyslogd的容器,通過log-driver的形式收集其他容器的日志。

這幾個(gè)容器通過Docker link的形式連接在一起,這樣,在容器之間可以通過容器名字互相訪問。對(duì)終端用戶而言,只需要暴露proxy (即Nginx)的服務(wù)端口。

Harbor的認(rèn)證流程

A、首先,請(qǐng)求被代理容器監(jiān)聽攔截,并跳轉(zhuǎn)到指定的認(rèn)證服務(wù)器。

B、如果認(rèn)證服務(wù)器配置了權(quán)限認(rèn)證,則會(huì)返回401。通知dockerclient在特定的請(qǐng)求中需要帶上一個(gè)合法的token。而認(rèn)證的邏輯地址則指向架構(gòu)圖中的core services。

C、 當(dāng)docker client接受到錯(cuò)誤code。client就會(huì)發(fā)送認(rèn)證請(qǐng)求(帶有用戶名和密碼)到coreservices進(jìn)行basic auth認(rèn)證。

D、 當(dāng)C的請(qǐng)求發(fā)送給ngnix以后,ngnix會(huì)根據(jù)配置的認(rèn)證地址將帶有用戶名和密碼的請(qǐng)求發(fā)送到core serivces。

E、 coreservices獲取用戶名和密碼以后對(duì)用戶信息進(jìn)行認(rèn)證(自己的數(shù)據(jù)庫或者介入LDAP都可以)。成功以后,返回認(rèn)證成功的信息。

Harbor的安裝方式

*在線online安裝 ?--> 由于國(guó)內(nèi)墻和網(wǎng)速率的原因,體驗(yàn)不好

*離線offline安裝 ?--> 下載包較大 [ 包含了相關(guān)依賴鏡像 ],從官網(wǎng)下載效果不理想


三、實(shí)驗(yàn)準(zhǔn)備

操作系統(tǒng): CentOS7.3 Minimal

HarborServer:192.168.1.102

Client(docker):192.168.1.109


harbor-offline-installer-v1.1.1.tgz

百度云:https://pan.baidu.com/s/1o7LC2d8


Harbor 主機(jī)

IP:192.168.1.102

Hostname:www.michael.com

# cat /etc/hosts

192.168.1.102 www.michael.com


docker主機(jī)(用來實(shí)驗(yàn)向Harbor registry拉取和推送鏡像

IP:192.168.1.109



四、搭建CA,創(chuàng)建相關(guān)證書

在Harbor 主機(jī):


1.搭建CA,實(shí)現(xiàn)加密傳輸

安裝openssl相關(guān)包

# yum?-y?install pcre pcre-devel zlib-devel openssl openssl-devel


2.創(chuàng)建證書

創(chuàng)建證書存放目錄

# mkdir -p /data/cert

# cd /data/cert/


3.創(chuàng)建 CA 根證書

#openssl req? -newkey rsa:4096 \

> -nodes -sha256 -keyout ca.key -x509 -days 365 \

> -out ca.crt -subj "/C=CN/L=Shenzhen/O=Harbor/CN=www.harbor.com"

# ?ls

ca.crt ? ?ca.key


4.生成證書簽名, 設(shè)置訪問域名為 www.michael.com

openssl req -newkey rsa:4096 \

> -nodes -sha256 -keyout www.michael.com.key \

> -out www.michael.com.csr -subj "/C=CN/L=Shenzhen/O=XXX/CN=www.michael.com"

# ls

ca.crt? ca.key?www.michael.com.csr? www.michael.com.key


5.生成主機(jī)的證書

# openssl x509 -req -days 365 -in www.michael.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.michael.com.crt

Signature ok

subject=/C=CN/L=Shenzhen/O=XXX/CN=www.michael.com

Getting CA Private Key

# ls

ca.crt??

ca.key??

ca.srl?

www.michael.com.crt

www.michael.com.key

www.michael.com.csr??



五、Harbor安裝部署

在Harbor 主機(jī):


1.安裝docker?

# yum ?-y install docker?

# systemctl start ?docker.service

# systemctl enable docker.service


2.安裝 docker-compose

# ?yum -y ?install python-setuptools

# easy_install pip?

# ?pip?install?docker-compose

# ?pip?install backports.ssl_match_hostname


3.將 harbor-offline-installer-v1.1.1.tgz 上傳至 /root

# tar zxf? harbor-offline-installer-v1.1.1.tgz

# cd harbor


4.修改habor配置文件 ? harbor.cfg?

# vim? harbor.cfg

hostname= www.michael.com ? ? ? # 指定私有倉(cāng)庫的主機(jī)名,可以是IP地址,也可以是域名

ui_url_protocol?=?https ? ? ? ? ? ? ? ? ? #?用戶訪問私倉(cāng)時(shí)使用的協(xié)議,默認(rèn)時(shí)http,配置成https

db_password?=?root123 ? ? ? ? ? ? ? ? #?指定mysql數(shù)據(jù)庫管理員密碼

harbor_admin_password:Harbor12345 ? ? ? ? ? ? ?#?harbor的管理員賬戶密碼

ssl_cert?=/data/cert/www.michael.com.crt ? ? ? ? ? ? ?#?設(shè)置證書文件路徑

ssl_cert_key?=/data/cert/www.michael.com.key ? ? ?#?設(shè)置證書密鑰文件路徑


5.執(zhí)行自帶腳本一鍵安裝

# ./install.sh

6.WEB訪問

https://192.168.1.102

https://www.michael.com

默認(rèn)用戶名:admin

默認(rèn)密碼:Harbor12345?

?[可通過安裝前 harbor.cfg 配置文件修改?harbor_admin_password?指定 ]

*通過 admin 賬戶登陸創(chuàng)建 test 用戶?

*退出 admin 賬戶登陸 test 用戶

*創(chuàng)建 test 項(xiàng)目, 訪問級(jí)別選擇公開


六、客戶端(docker機(jī))測(cè)試

在 docker機(jī):


1.安裝docker

# yum -y isntall docker


2.創(chuàng)建倉(cāng)庫證書存放目錄

# mkdir /etc/docker/certs.d/www.michael.com


3.從harbor服務(wù)器獲取證書至倉(cāng)庫證書目錄

# scp root@192.168.1.102:/data/cert/ca.crt /etc/docker/certs.d/www.michael.com/ca.crt

# update-ca-trust

# systemctl restart docker


4.添加 192.168.1.102(www.michael.com)域名解析

# vim ? /etc/hosts

192.168.1.102 www.michael.com


5. 用戶登陸

# docker login? www.michael.com? -u admin ?-p? "XXX"

# docker login ?www.michael.com ?-u test ? ? ?-p ? "XXX"

# docker pull ubuntu:14.04

# docker tag ubuntu:17.04? www.michael.com/test/ubuntu:17.04

# docker push www.michael.com/test/ubuntu:17.04

關(guān)于倉(cāng)庫、用戶的 push 和pull權(quán)限控制,請(qǐng)上官網(wǎng)查看相關(guān)教程


七、關(guān)于停止和啟動(dòng) Harbor(修改配置文件需重啟)

在 Harbor 機(jī):

# docker-compose? -f? /root/harbor/docker-compose.yml ?down

# ?docker-compose? -f? /root/harbor/docker-compose.yml ?up ?-d


八、參考

企業(yè)級(jí)Registry開源項(xiàng)目Harbor

http://dockone.io/article/1179;

http://www.cnblogs.com/jicki/p/5737369.html

http://www.jiagoumi.com/work/1221.html

Docker實(shí)踐:使用Harbor搭建Docker私有倉(cāng)庫

http://www.jiagoumi.com/work/1221.html

http://www.jiagoumi.com/category/work

企業(yè)級(jí)Docker Registry開源工具Harbor的介紹以及使用指南

https://my.oschina.net/xxbAndy/blog/786712

Docker Harbor registry(http)私有倉(cāng)庫搭建

http://lisea.blog.51cto.com/5491873/1934750

Docker Harbor registry(https)安全認(rèn)證搭建

https://github.com/vmware/harbor

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容