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
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