搭建Harbor企業級docker倉庫

一、Harbor簡介

1、簡介

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

2、特性

(1)基於角色的訪問控制 :用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)裏有不同的權限。

(2)鏡像複製 : 鏡像可以在多個Registry實例中複製(同步)。尤其適合於負載均衡,高可用,混合雲和多雲的場景。

(3)圖形化用戶界面 : 用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。

(4)AD/LDAP 支持 : Harbor可以集成企業內部已有的AD/LDAP,用於鑑權認證管理。

(5)審計管理 : 所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。

(6)國際化 : 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。

(7)RESTful API : RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。

(8)部署簡單 : 提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設備。

3、組件

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,供日後進行分析。

各個組件之間的關係如下圖所示:

1.png

4、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)的服務端口。

二、環境準備

1、生產環境

名稱

版本

系統環境

CentOS Linux release 7.5.1804 (Core)

docker-ce

Docker version 18.09.0

docker-compose

1.22.0

Harbor

v1.6.0

安裝位置

/usr/local/harbor

2、暫時關閉防火牆和selinux

3、服務下載地址:

docker源:wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker-compose:https://github.com/docker/compose/releases/

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

三、搭建服務

1、安裝docker-ce

#安裝

# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# yum install docker-ce -y

2.png

#卸載

# yum remove docker-ce -y

卸載後images,containers,volumes,configuration files 是不能自動刪除的,爲了刪除all images,containers,and volumes,請執行如下命令:

# rm -rf /var/lib/docker

2、安裝docker-compose

方法一:二進制

(1)下載包

# wget  https://github.com/docker/compose/releases/download/1.22.0/docker-compose-Linux-x86_64

(2)安裝服務

# mv docker-compose-Linux-x86_64 docker-compose

# cp docker-compose /usr/local/bin/

# chmod u+x /usr/local/bin/docker-compose

(3)根據自己的情況決定是否安裝命令補全功能

# yum install bash-completion

(4)查看

# docker-compose

# docker-compose  version

3.png

(5)卸載

# rm  /usr/local/bin/docker-compose

方法二:pip

(1)安裝

# yum install python-pip

# pip install  docker-compose

(2)卸載:

# pip uninstall  docker-compose

3、安裝Harbor

(1)下載

# cd /usr/local/src/

# wget  https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-online-installer-v1.6.0.tgz

(2)解壓文件

# tar -xvf harbor-online-installer-v1.6.0.tgz -C /usr/local/

# cd /usr/local/harbor/

(3)修改配置文件

# vim harbor.cfg

#域名配置

hostname = www.jiangjj.com

#郵箱配置

email_server = smtp.qq.com

email_server_port = 25

email_username = [email protected]

email_password = 123456

email_from = admin <[email protected]>

email_ssl = false

email_insecure = false

#禁止用戶註冊

self_registration = off

#設置只有管理員可以創建項目

project_creation_restriction = adminonly

(4)執行腳本

# ./prepare

4.png

# ./install.sh

5.png

(5)查看

# docker ps

6.png

或者

# docker-compose ps

7.png

(6)Harbor的啓動和停止

啓動Harbor

# docker-compose start

停止Harbor

# docker-comose stop

重啓Harbor

# docker-compose restart

4、訪問

在瀏覽器輸入www.jiangjj.com,因爲我配置的域名爲www.jiangjj.com。

默認賬號密碼: admin / Harbor12345 登錄後修改密碼

http://www.jiangjj.com/

8.png

四、Harbor配置TLS證書

上面對Harbor的配置都是使用的http協議訪問,但是爲了安全性我們工作中一般都是配置https訪問。在此,做一個簡單的配置如下:

1、修改harbor配置文件(購買證書)

hostname = www.jiangjj.com

ui_url_protocol = https

ssl_cert = /etc/certs/jiangjj.com.crt

ssl_cert_key = /etc/certs/jiangjj.com.key

2、創建自簽名證書key文件

# mkdir /etc/certs

# openssl genrsa -out /etc/certs/jiangjj.com.key 2048

3、創建自簽名證書crt文件

# openssl req -x509 -new -nodes -key /etc/certs/jiangjj.com.key -subj "/CN=www.jiangjj.com" -days 5000 -out /etc/certs/jiangjj.com.crt

4、重新安裝harbor

# ./prepare

./install.sh

9.png

5、配置客戶端證書

# mkdir -p /etc/docker/certs.d/www.jiangjj.com

#把crt證書拷貝到新建目錄下,重啓docker即可

6、測試

10.png

五、測試上傳下載鏡像

1、在各個客戶端修改docker

# vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry www.jiangjj.com

增加 --insecure-registry  www.jiangjj.com 即可。

重啓docker:

# systemctl daemon-reload

# systemctl  restart docker

或者

創建/etc/docker/daemon.json文件,在文件中指定倉庫地址

# cat > /etc/docker/daemon.json << EOF

{ "insecure-registries":["www.jiangjj.com"] }

EOF

然後重啓docker就可以。

# systemctl  restart docker

2、上傳鏡像

如果不是自己的鏡像需要打包

# docker tag centos:7.4.1708 www.jiangjj.com/jiangjj/centos:7.4.1708

#授權

# docker login www.jiangjj.com

#上傳

# docker push www.jiangjj.com/jiangjj/centos:7.4.1708

在harbor查看如下圖:

11.png

3、客戶端拉去鏡像

# docker pull www.jiangjj.com/jiangjj/centos:7.4.1708

即可


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