企業級docker鏡像倉庫----Harbor高可用部署

1、Habor簡介html

一、harbor介紹前端

github地址:https://github.com/goharbor/harbornode

Harbor is an an open source trusted cloud native registry project that stores, signs, and scans content. Harbor extends the open source Docker Distribution by adding the functionalities usually required by users such as security, identity and management. Having a registry closer to the build and run environment can improve the image transfer efficiency. Harbor supports replication of images between registries, and also offers advanced security features such as user management, access control and activity auditing.mysql

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

二、架構圖和組件git

 

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

  • Proxy:Harbor的registry, UI, token等服務,經過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不一樣的服務。web

  • Registry: 負責儲存Docker鏡像,並處理docker push/pull 命令。因爲咱們要對用戶進行訪問控制,即不一樣用戶對Docker image有不一樣的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會經過公鑰對token 進行解密驗證。sql

  • Core services: 這是Harbor的核心功能,主要提供如下服務:docker

  • 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實現

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

# docker-compose ps
       Name                     Command               State                                Ports                              
------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/harbor_adminserver       Up                                                                      
harbor-db            docker-entrypoint.sh mysqld      Up      3306/tcp                                                        
harbor-jobservice    /harbor/harbor_jobservice        Up                                                                      
harbor-log           /bin/sh -c crond && rm -f  ...   Up      127.0.0.1:1514->514/tcp                                         
harbor-ui            /harbor/harbor_ui                Up                                                                      
nginx                nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
registry             /entrypoint.sh serve /etc/ ...   Up      5000/tcp 
  • 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。
  • 這幾個容器經過Docker link的形式鏈接在一塊兒,這樣,在容器之間能夠經過容器名字互相訪問。對終端用戶而言,只須要暴露proxy (即Nginx)的服務端口。

2、安裝和配置Harbor的高可用架構

一、環境說明

環境名稱 版本
系統版本 CentOS Linux release 7.6.1810 (Core)
docker-ce 18.09.7-CE
docker-compose  v1.18.0
Harbor  v1.8.0
安裝方式 離線安裝
安裝位置  

服務器信息說明

主機名 IP地址 角色 CPU memory
master 192.168.100.156 master >=2 >=2G
node01 192.168.100.157 worker >=2 >=2G
node02 192.168.100.158 worker >=2 >=2G

二、安裝docker

請參考以前博客安裝http://www.javashuo.com/article/p-tihursoc-by.html

三、安裝docker-compose v1.18.0

$ yum install -y docker-compose

$ docker-compose --verison

docker-compose version 1.18.0, build 8dd22a9

四、離線安裝harbor v1.8.0

下載地址https://github.com/goharbor/harbor/releases
你們也能夠到個人網盤下載:https://pan.baidu.com/s/1qazfH-9DPeMe-ofIxlEhLw
提取碼:l540

$ tar -xvf harbor-offline-installer-v1.8.0.tgz

$ cd harbor

$ vim harbor.yml
hostname: 192.168.100.156       //改爲本機的IP,因爲是作高可用,經過IP來負載均衡

$ cd /home/harbor

$ sh install.sh

輸出的部分信息:

✔ ----Harbor has been installed and started successfully.----

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

五、瀏覽器登錄 http://192.168.100.156

用戶名:admin 密碼:Harbor12345

六、在master部署nginx  

$ mkdir nginx && cd nginx

$ docker pull nginx:1.13.12

故障解決方案,拉取鏡像的時候報錯
[root@master nginx]# docker pull nginx:1.13.12
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

解決方案:
1)建立daemon.json文件

vim /etc/docker/daemon.json

2) 寫入:

{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
3)重啓:

[root@km docker]# systemctl daemon-reload 
[root@km docker]# systemctl restart docker
4)完美解決。
--------------------- 
做者:那記憶微涼 
來源:CSDN 
原文:https://blog.csdn.net/BigData_Mining/article/details/86769696 
版權聲明:本文爲博主原創文章,轉載請附上博文連接!

七、編寫nginx的配置文件nginx.conf  

$ vim nginx.conf

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

   worker_connections 1024;
}

stream {

   upstream hub {
        server 192.168.100.156:80;
 
   }
   server {
        listen 80;
        proxy_pass hub;
        proxy_timeout 300s;
        proxy_connect_timeout 5s;
}
}

八、編寫Nginx重啓腳本 

$ vim restart.sh

#!/bin/bash

docker stop harbor nginx

docker rm harbor nginx

docker run -idt --net=host --name harbornginx -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.13.12

sh restart.sh

九、在本地電腦綁定HOST,以便進行域名訪問

192.168.100.150 harbor.test.com

3、設置Harbor雙主複製  

 

 

 

 

 4、進行測試  

 建立一個kubernetes的項目,在建立其餘用戶,如test,將這個用戶以開發人員的身份加入項目中,讓其有推送鏡像的權限

$ docker tag nginx:1.13.12 hub.test.com/kubernetes/nginx:1.13.12    //把鏡像打上本身的標籤

$ vim /etc/host

192.168.100.150 harbor.test.com

遇到一個故障,沒法解除
[root@master nginx]# docker login harbor.test.com
Username: test
Password: 
Error response from daemon: Get https://harbor.test.com/v2/: dial tcp 192.168.100.150:443: connect: connection refused

解決方法
$ vim /usr/lib/systemd/system/docker.service  添加以下內容

ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry=192.168.100.156
相關文章
相關標籤/搜索