企業級私有倉庫,鏡像倉庫Harbor

Harbor 簡介

Harbor 是一個用於存儲和分發 Docker 鏡像的企業級 Registry 服務器, 通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源 Docker Distribution。 作爲一個企業級私有 Registry 服務器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構建和運行環境傳輸鏡像的效率。 Harbor 支持安裝在多個 Registry 節點的鏡像資源複製,鏡像全部保存在私有 Registry 中,確保數據和知識產權在公司內部網絡中管控。 另外,Harbor 也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
Harbor 是由 VMware 中國研發團隊負責開發的開源企業級 Docker Registry, 不僅解決了我們直接使用 Docker Registry 的功能缺失, 更解決了我們在生產使用 Docker Registry 面臨的高可用、鏡像倉庫直接複製、鏡像倉庫性能等運維痛點。

Harbor 特性

(1)基於角色的訪問控制 :用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)裏有不同的權限。
(2)鏡像複製 : 鏡像可以在多個Registry實例中複製(同步)。尤其適合於負載均衡,高可用,混合雲和多雲的場景。
(3)圖形化用戶界面 : 用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
(4)AD/LDAP 支持 : Harbor可以集成企業內部已有的AD/LDAP,用於鑑權認證管理。
(5)審計管理 : 所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。
(6)國際化 : 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。
(7)RESTful API : RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
(8)部署方便 : 提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設備。

Harbor在架構上主要由6個組件構成:

(1)Proxy:Harbor的registry, UI, token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務。
(2)Registry: 負責儲存Docker鏡像,並處理docker push/pull 命令。由於我們要對用戶進行訪問控制,即不同用戶對Docker image有不同的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會通過公鑰對token 進行解密驗證。
(3)Core services: 這是Harbor的核心功能,主要提供以下服務:
1)UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 並對用戶進行授權。
2)webhook:爲了及時獲取registry 上image狀態變化的情況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。
3)token 服務:負責根據用戶權限給每個docker push/pull命令簽發token. Docker 客戶端向Regiøstry服務發起的請求,如果不包含token,會被重定向到這裏,獲得token後再重新向Registry進行請求。
(4)Database:爲core services提供數據庫服務,負責儲存用戶權限、審計日誌、Docker image分組信息等數據。
(5)Job Services:提供鏡像遠程複製功能,可以把本地鏡像同步到其他Harbor實例中。
(6)Log collector:爲了幫助監控Harbor運行,負責收集其他組件的log,供日後進行分析。
各個組件之間的關係如下圖所示:
企業級私有倉庫,鏡像倉庫Harbor

Harbor構建

Harbor的每個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用於部署Harbor的Docker Compose模板位於 harbor/docker-compose.yml,打開這個模板文件,發現Harbor是由7個容器組成的;
(1)nginx:nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,所以開放https的443端口,它將流量分發到後端的ui和正在docker鏡像存儲的docker registry。
(2)harbor-jobservice:harbor-jobservice 是harbor的job管理模塊,job在harbor裏面主要是爲了鏡像倉庫之前同步使用的;
(3)harbor-ui:harbor-ui是web管理頁面,主要是前端的頁面和後端CURD的接口;
(4)registry:registry就是docker原生的倉庫,負責保存鏡像。
(5)harbor-adminserver:harbor-adminserver是harbor系統管理接口,可以修改系統配置以及獲取系統信息。
(6)harbor-db:harbor-db是harbor的數據庫,這裏保存了系統的job以及項目、人員權限管理。由於本harbor的認證也是通過數據,在生產環節大多對接到企業的ldap中;
(7)harbor-log:harbor-log是harbor的日誌服務,統一管理harbor的日誌。通過inspect可以看出容器統一將日誌輸出的syslog。
這幾個容器通過Docker link的形式連接在一起,這樣在容器之間可以通過容器名字互相訪問。對終端用戶而言,只需要暴露proxy (即Nginx)的服務端口。

企業級私有倉庫鏡像倉庫Harbor

在網上下載docker-compose工具。

https://github.com/docker/compose/releases/tag/1.25.1-rc1

[root@docker02 ~]# tar -zxf docker-compose.tar.gz  -C /usr/local/bin/
//解壓到命令目錄
[root@docker02 ~]# chmod  +x /usr/local/bin/docker-compose 
[root@docker02 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
//安裝依賴包
[root@docker02 ~]# docker-compose -v
//查看版本信息
docker-compose version 1.24.0, build 0aa59064

在網上下載harbor並安裝。

https://github.com/goharbor/harbor/releases

[root@docker02 ~]# tar -zxf harbor-offline-installer-v1.7.4.tgz  -C /usr/local/
//導入harbor離線安裝包,解壓到/usr/

修改harbor配置文件,並執行自帶的安裝腳本

[root@docker02 ~]# cd  /usr/local/harbor/
[root@docker02 harbor]#ls

企業級私有倉庫,鏡像倉庫Harbor

[root@docker02 harbor]# vim harbor.cfg 
hostname = 192.168.1.13    #13 改爲本機IP地址
harbor_admin_password = Harbor12345   #harbor密碼
[root@docker02 harbor]# ./install.sh
//執行一下自帶的安裝腳本

在瀏覽器登陸一下harbor

http://192.168.1.13:80 用戶名:admin,密碼:Harbor12345

創建一個項目
企業級私有倉庫,鏡像倉庫Harbor
企業級私有倉庫,鏡像倉庫Harbor
企業級私有倉庫,鏡像倉庫Harbor
修改docker配置文件,連接私有倉庫

[root@docker02 harbor]# vim /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.
13  #13行添加

[root@docker02 harbor]# systemctl  daemon-reload 
[root@docker02 harbor]# systemctl restart docker
//重啓docker
[root@docker02 harbor]# docker ps
//發現運行的容器少了很多

企業級私有倉庫,鏡像倉庫Harbor

[root@docker02 harbor]# docker-compose start
//啓動harker的文件中的容器

企業級私有倉庫,鏡像倉庫Harbor
登陸harbor

[root@docker02 harbor]# docker login -u admin -p Harbor12345 192.168.1.13
//登陸harbor

上傳鏡像到倉庫

[root@docker02 harbor]# docker tag centos:7  192.168.1.13/xgp/centos:7
//修改標籤
[root@docker02 harbor]# docker push 192.168.1.13/xgp/centos:7 
//上傳鏡像

企業級私有倉庫,鏡像倉庫Harbor
第二臺加入倉庫,測試下載

[root@docker02 harbor]# vim /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.
13  #13行添加

[root@docker02 harbor]# systemctl  daemon-reload 
[root@docker02 harbor]# systemctl restart docker
//重啓docker

登陸harbor

[root@docker02 harbor]# docker login -u admin -p Harbor12345 192.168.1.13
//登陸harbor

下載剛剛上傳的鏡像

[root@docker01 xxx]# docker pull  192.168.1.13/xgp/centos:7
[root@docker01 xxx]# docker images
//查看本地鏡像

企業級私有倉庫,鏡像倉庫Harbor
下載成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章