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
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
建立test01項目,非公開
若是是非公開模式,要使用docker login 192.168.0.201 登錄 才能上傳下載鏡像;
若是想其餘機器直接訪問拉取,能夠設置爲公開,docker pull 192.168.0.201/test01/busybox:latest 命令纔不會出login的錯誤。
項目建立完成後,回到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登陸後才能拉取。
下面設置主從複製
從機器啓動後,無需配置界面
主要在主機界面進行配置
倉庫管理--新建目標--設置從倉庫
而後 複製管理--新建規則
源項目是指主機器上要同步的項目,好比以前建立的test01
目標指的是 從機器
設置完成後 能夠看到同步狀態
而後打開從機器的web界面查看是否成功,這裏看到已經成功同步
可參考文章:
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的配置都是使用的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