Harbor管理docker鏡像(1.7.5版本-主從複製)

harbor簡介html

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


harbor組件java

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

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

Harbor實現組成python

[root@localhost harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
registryctl          /harbor/start.sh                 Up (healthy)

每一個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用於部署Harbor的Docker Compose模板位於 harbor/docker-compose.yml,這個模板文件寫明,Harbor是由7個容器組成的;linux

nginx:nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,因此開放https的443端口,它將流量分發到後端的ui和正在docker鏡像存儲的docker registry。
harbor-jobservice:harbor-jobservice 是harbor的job管理模塊,job在harbor裏面主要是爲了鏡像倉庫以前同步使用的;
harbor-ui:harbor-ui是web管理頁面,主要是前端的頁面和後端CURD的接口;
registry:registry就是docker原生的倉庫,負責保存鏡像。
harbor-adminserver:harbor-adminserver是harbor系統管理接口,能夠修改系統配置以及獲取系統信息。
這幾個容器經過Docker link的形式鏈接在一塊兒,在容器之間經過容器名字互相訪問。對終端用戶而言,只須要暴露proxy (即Nginx)的服務端口。
harbor-db:harbor-db是harbor的數據庫,這裏保存了系統的job以及項目、人員權限管理。因爲本harbor的認證也是經過數據,在生產環節大多對接到企業的ldap中;
harbor-log:harbor-log是harbor的日誌服務,統一管理harbor的日誌。經過inspect能夠看出容器統一將日誌輸出的syslog。


服務器準備
nginx


主機
系統及配置
docker版本
docker-compose版本
harbor版本
192.168.0.201(主)
centos7.2   2核2G 30G盤
18.09.5
1.24.0 1.7.5
192.168.0.202(從)
centos7.2   2核2G 30G盤
18.09.5 1.24.0 1.7.5

安裝centos7.2系統,最小化安裝git

設置好網絡和防火牆  網絡須要能訪問外網,github

ip 192.168.0.201(主)  192.168.0.202(從)
web

下面關閉防火牆

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux


設置yum源

cd /etc/yum.repos.d/

yum install vim unzip lrzsz wget net-tools -y

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install epel-release


安裝docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
yum clean all  && yum makecache fast
yum install docker-ce -y
systemctl enable docker && systemctl restart docker

修改docker啓動文件並重啓docker
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.201    #修改此處增長橙色內容(後面ip可換成域名)
systemctl daemon-reload
systemctl restart docker
[root@localhost harbor]# docker version
Client:
 Version:           18.09.5
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        e8ff056
 Built:             Thu Apr 11 04:43:34 2019
 OS/Arch:           linux/amd64
 Experimental:      false

安裝docker-compose

yum install python-pip -y
pip install --upgrade pip
pip install docker-compose #默認最新版本,可使用 docker-compose==version指定安裝版本
docker-compose -version

[root@localhost harbor]# docker-compose -v
docker-compose version 1.24.0, build 0aa5906


安裝Harbor

harbor有offline和online兩種,這裏選offline,下載地址https://github.com/goharbor/harbor/releases

圖片.png


wget方式沒法正常下載或者速度超慢,建議先用瀏覽器下載  而後上傳到兩個機器,

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz

cd /home

tar xf harbor-offline-installer-v1.7.5.tgz.tar

cd harbor/


修改配置文件

多數信息無需更改,把hostname變成本身的域名或者ip便可,其餘能夠保持不變,/data/cert 目錄自行須要建立。

mkdir -p /data/cert

vim harbor.cfg

[root@localhost harbor]# cat harbor.cfg |grep -v "^#"|grep -v "^$"

_version = 1.7.0
hostname = 192.168.0.201
ui_url_protocol = http
max_job_workers = 10 
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
email_identity = 
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
harbor_admin_password = Harbor12345
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid 
ldap_scope = 2 
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
self_registration = on
token_expiration = 30
project_creation_restriction = everyone
db_host = postgresql
db_password = root123
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password = 
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = root123
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =

執行安裝

./install

執行命令,Harbor服務就會根據當期目錄下的docker-compose.yml開始下載依賴的鏡像,檢測並按照順序依次啓動各個服務

用docker-compose ps 命令查看

[root@localhost harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-portal        nginx -g daemon off;             Up (healthy)   80/tcp                                                          
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
registryctl          /harbor/start.sh                 Up (healthy)


Harbor的啓動和中止命令:

啓動Harbor
# docker-compose start
中止Harbor
# docker-comose stop
重啓Harbor
# docker-compose restart

================================

以上步驟兩個機器都作

================================


而後瀏覽器登錄http://192.168.0.201/

帳戶密碼是默認admin / Harbor12345

QQ截圖20190430161245.jpg

QQ截圖20190430161314.jpg

建立test01項目,非公開

若是是非公開模式,要使用docker login 192.168.0.201 登錄  才能上傳下載鏡像;

若是想其餘機器直接訪問拉取,能夠設置爲公開,docker pull 192.168.0.201/test01/busybox:latest  命令纔不會出login的錯誤。

QQ截圖20190430161824.jpg

QQ截圖20190430161838.jpg


項目建立完成後,回到201服務器上,用命令操做鏡像

下載nginx和busybox原始鏡像

docker pull nginx
docker pull busybox

給鏡像打test01項目標籤

docker tag busybox:latest 192.168.0.201/test01/busybox:latest
docker tag nginx:latest 192.168.0.201/test01/nginx:latest

接着登陸    docker login 192.168.0.201

用admin,密碼Harbor12345
Username (admin): admin
Password: 
Login Succeeded

登錄後將鏡像push到倉庫

docker push 192.168.0.201/test01/nginx
docker push 192.168.0.201/test01/busybox


測試本地倉庫中拉取鏡像

docker pull 192.168.0.201/test01/nginx:latest

本機能夠直接拉取

其餘機器須要修改docker的配置 ,增長 --insecure-registry 192.168.0.201  而後重啓docker才行

而且要求test01項目是設置爲公開的,才能直接拉取,不然必須用docker login 192.168.0.201登陸後才能拉取


下面設置主從複製

從機器啓動後,無需配置界面

主要在主機界面進行配置

倉庫管理--新建目標--設置從倉庫

QQ截圖20190430165246.jpg


而後 複製管理--新建規則

源項目是指主機器上要同步的項目,好比以前建立的test01

目標指的是 從機器

QQ截圖20190430165914.jpg


設置完成後 能夠看到同步狀態

QQ截圖20190430165947.jpg


而後打開從機器的web界面查看是否成功,這裏看到已經成功同步

圖片.png


可參考文章:

https://www.cnblogs.com/panwenbin-logs/p/10218099.html

https://www.jianshu.com/p/4f9474081c8a

http://www.javashuo.com/article/p-vmfddcqg-mg.html

http://www.javashuo.com/article/p-xejarjer-hx.html


 

Harbor配置TLS證書

上面對Harbor的配置都是使用的http協議訪問,可是咱們工做中通常都是配置https訪問。

下面演示一下怎麼配置Harbor可使用https訪問,以及配置TLS證書都須要作哪些工做。

下面是簡要步驟,詳細請結合本身項目調整。


1 修改harbor配置

hostname = docker-hub.vonechain.com
ui_url_protocol = https
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key

2 增長hosts解析

 cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.201  docker-hub.vonechain.com

3 生成自簽名證書

mkdir -p /data/cert

cd /data/cert/

生成key文件

openssl genrsa -out /data/cert/server.key 2048

生成crt文件   ##注意CN

openssl req -x509 -new -nodes -key /data/cert/server.key -subj "/CN=docker-hub.vonechain.com" -days 5000 -out /data/cert/server.crt

[root@localhost cert]# ll
總用量 8
-rw-r--r-- 1 root root 1135 4月  30 21:01 server.crt
-rw-r--r-- 1 root root 1679 4月  30 21:00 server.key

4 執行安裝harbor  

cd /home/harbor

./install     ##就會生成 https 鏈接了,https://docker-hub.vonechain.com.

Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating redis              ... done
Creating registryctl        ... done
Creating registry           ... done
Creating harbor-core        ... done
Creating harbor-portal      ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://docker-hub.vonechain.com. 
For more details, please visit https://github.com/goharbor/harbor .

而後,windows訪問https://docker-hub.vonechain.com
須要添加本地hosts,界面配置test01項目並設置公開    而後在本機上做一些鏡像上傳  

docker pull busybox

docker tag busybox:latest docker-hub.vonechain.com/test01/busybox:latest

docker login -u admin -p 'Harbor12345' docker-hub.vonechain.com

docker push docker-hub.vonechain.com/test01/busybox:latest


5 配置客戶端 192.168.0.88

安裝docker

yum install docker -y

增長hosts解析

192.168.0.201  docker-hub.vonechain.com

建立證書目錄

mkdir -p /etc/docker/certs.d/docker-hub.vonechain.com

回到harbor主機上把crt文件複製過去

scp server.crt root@192.168.0.88:/etc/docker/certs.d/docker-hub.vonechain.com/

重啓客戶端docker

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry docker-hub.vonechain.com

systemctl restart docker

執行拉取鏡像

docker pull docker-hub.vonechain.com/test01/busybox:latest

[root@localhost ~]# docker pull docker-hub.vonechain.com/test01/busybox:latest
Trying to pull repository docker-hub.vonechain.com/test01/busybox ... 
latest: Pulling from docker-hub.vonechain.com/test01/busybox
fc1a6b909f82: Pull complete 
Digest: sha256:f79f7a10302c402c052973e3fa42be0344ae6453245669783a9e16da3d56d5b4
Status: Downloaded newer image for docker-hub.vonechain.com/test01/busybox:latest
[root@localhost ~]# docker images
REPOSITORY        TAG     IMAGE ID       CREATED             SIZE
docker-hub.vonechain.com/test01/busybox   latest     af2f74c517aa     3 weeks ago     1.2 MB

到此https模式可用了,全部客戶端機器必須用ssl證書才能訪問harbor

可參考:http://www.javashuo.com/article/p-vmfddcqg-mg.html

相關文章
相關標籤/搜索