Harbor安裝指南
Harbor官網配置CA認證
Kubernetes Harbor安裝教程html
一、容器應用的開發和運行離不開可靠的鏡像管理。從安全和效率等方面考慮,部署在私有環境內的 Registry 是很是必要的。前端
二、Harbor 是由 VMware 公司中國團隊爲企業用戶設計的 Registry server 開源項目,包括了權限管理(RBAC)、LDAP、審計、管理界面、自我註冊、HA 等企業必需的功能,同時針對中國用戶的特色,設計鏡像複製和中文支持等功能,歡迎使用和反饋意見。node
三、做爲一個企業級私有 Registry 服務器,Harbor 提供了更好的性能和安全。提高用戶使用 Registry 構建和運行環境傳輸鏡像的效率。Harbor 支持安裝在多個 Registry 節點的鏡像資源複製,鏡像所有保存在私有 Registry 中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor 也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。linux
用戶與 Docker 鏡像倉庫經過「項目」進行組織管理,一個用戶能夠對多個鏡像倉庫在同一命名空間(project)裏有不一樣的權限。nginx
鏡像能夠在多個 Registry 實例中複製(同步)。尤爲適合於負載均衡,高可用,混合雲和多雲的場景。git
Harbor 能夠集成企業內部已有的 AD/LDAP,用於鑑權認證管理。github
全部針對鏡像倉庫的操做均可以被記錄追溯,用於審計管理。web
已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。redis
RESTful API 提供給管理員對於 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。sql
提供在線和離線兩種安裝工具, 也能夠安裝到 vSphere 平臺(OVA 方式)虛擬設備
Harbor的registry, UI, token等服務,經過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不一樣的服務。
負責儲存Docker鏡像,並處理docker push/pull 命令。因爲咱們要對用戶進行訪問控制,即不一樣用戶對Docker image有不一樣的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會經過公鑰對token 進行解密驗證。
這是Harbor的核心功能,主要提供如下服務:
1)UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 並對用戶進行受權。
2)webhook:爲了及時獲取registry 上image狀態變化的狀況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。
3)token 服務:負責根據用戶權限給每一個docker push/pull命令簽發token. Docker 客戶端向Regiøstry服務發起的請求,若是不包含token,會被重定向到這裏,得到token後再從新向Registry進行請求。
爲core services提供數據庫服務,負責儲存用戶權限、審計日誌、Docker image分組信息等數據。
爲了幫助監控Harbor運行,負責收集其餘組件的log,供往後進行分析。
各個組件之間的關係以下圖所示:
系統版本:centos7x3.10.0-514.el7.x86_64
Docker版本:1.13.1(yum安裝)
harbor版本:harbor-offline-installer-v1.5.3.tgz(離線版)
注:因爲Harbor是基於Docker Registry V2版本,因此就要求Docker版本不小於1.10.0,Docker-compose版本不小於1.6.0。
關閉防火牆並禁止開機自啓
systemctl stop firewalld.service systemctl disable firewalld
關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
修改主機名
vi /etc/hostname harbor.123.com
域名綁定IP
vi /etc/hosts 192.168.152.170 harbor.123.com
重啓 reboot
【舒適提示:上面標紅幾個步驟必定要注意設置了,不然後面會訪問不通】
插播一條排查問題的方法,若是訪問不通,能夠安裝nmap,檢查下服務器露出的都有哪些端口
#安裝nmap yum -y install nmap
#該ip露出的端口 nmap 43.55.42.25
若是關了前面的防火牆,則會露出443
yum -y install docker
注:建議安裝最新穩定版docker!
yum -y install docker-compose
注:若是安裝不上就先安裝epel-release源,而後安裝docker-compose!
yum install -y yum-utils device-mapper-persistent-data lvm2
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz
注:由於我這裏網絡不太好因此使用aria2c下載的,以上截圖表示下載成功!
tar zxf harbor-offline-installer-v1.5.3.tgz
//建立harbor數據存儲目錄
mkdir /data
注:可能有的童鞋不太理解這一步的意思,簡單來講就是harbor默認的數據存儲目錄就是/data目錄,因此我先建立好,並將harbor解壓目錄移動到這裏,固然若是不建立,後期啓動harbor時也會自動建立的!
//移動harbor解壓目錄
mv harbor /data/
注:這一步操做是爲了方便管理和防止誤刪除(可作可不作)!
【我本人不喜歡 /data 目錄,很亂,對Harbor默認的數據存儲路徑從 /data 調整爲 /data/harbor-data了,至關於全部後面執行官了./install.sh 生成的文件統一放在指定路徑管理】
修改"secretkey"的路徑
#The path of secretkey storage secretkey_path = /data/harbor-data # 默認是 /data
修改原先全部默認爲"/data"的volume的掛載路徑
version: '2' services: log: image: goharbor/harbor-log:v1.6.1 container_name: harbor-log restart: always volumes: - /var/log/harbor/:/var/log/docker/:z - ./common/config/log/:/etc/logrotate.d/:z ports: - 127.0.0.1:1514:10514 networks: - harbor registry: image: goharbor/registry-photon:v2.6.2-v1.6.1 container_name: registry restart: always volumes: - /data/harbor-data/registry:/storage:z - ./common/config/registry/:/etc/registry/:z networks: - harbor environment: - GODEBUG=netdns=cgo depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "registry" postgresql: image: goharbor/harbor-db:v1.6.1 container_name: harbor-db restart: always volumes: - /data/harbor-data//database:/var/lib/postgresql/data:z networks: - harbor env_file: - ./common/config/db/env depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "postgresql" adminserver: image: goharbor/harbor-adminserver:v1.6.1 container_name: harbor-adminserver env_file: - ./common/config/adminserver/env restart: always volumes: - /data/harbor-data/config/:/etc/adminserver/config/:z - /data/harbor-data/secretkey:/etc/adminserver/key:z - /data/harbor-data/:/data/:z networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "adminserver" ui: image: goharbor/harbor-ui:v1.6.1 container_name: harbor-ui env_file: - ./common/config/ui/env restart: always volumes: - ./common/config/ui/app.conf:/etc/ui/app.conf:z - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z - ./common/config/ui/certificates/:/etc/ui/certificates/:z - /data/harbor-data/secretkey:/etc/ui/key:z - /data/harbor-data/ca_download/:/etc/ui/ca/:z - /data/harbor-data/psc/:/etc/ui/token/:z networks: - harbor depends_on: - log - adminserver - registry logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "ui" jobservice: image: goharbor/harbor-jobservice:v1.6.1 container_name: harbor-jobservice env_file: - ./common/config/jobservice/env restart: always volumes: - /data/harbor-data/job_logs:/var/log/jobs:z - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z networks: - harbor depends_on: - redis - ui - adminserver logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "jobservice" redis: image: goharbor/redis-photon:v1.6.1 container_name: redis restart: always volumes: - /data/harbor-data/redis:/var/lib/redis networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "redis" proxy: image: goharbor/nginx-photon:v1.6.1 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor ports: - 80:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - ui - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy" networks: harbor: external: false
改完後可經過grep檢查下是否都改全了
cat docker-compose.yml | grep harbor-data
完成上述修改後執行下述命令從新部署容器便可:
./prepare docker-compose up -d
//建立CA證書存放目錄
mkdir /data/cert
注:能夠在這個目錄裏建立證書!
//進入存放證書目錄
cd /data/cert/
//建立本身的CA證書
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
注:由於出於安全的考慮,因此強烈建議搭建基於https的harbor,那麼就須要添加ca證書!
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.123.com.key -out harbor.123.com.csr
openssl x509 -req -days 365 -in harbor.123.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.123.com.crt
注:以上這步操做是和wangfeiyu.com.csr在同一目錄操做的,若是不在同一目錄,須要寫絕對路徑,不然可能會報錯!
//echo subjectAltName = IP:192.168.152.170 > extfile.cnf //openssl x509 -req -days 365 -in wangfeiyu.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor.123.com.crt
注:執行以上兩條命令便可實現IP註冊主機證書!
vi /data/harbor/harbor.cfg
#hostname設置訪問地址。可使用ip、域名、主機名,不能夠設置爲127.0.0.1或localhost。(若是部署的是備份庫,填寫ip而不是域名,不然會致使倉庫管理鏈接失敗,host沒法識別緣由不明) hostname = harbor.123.com #訪問協議。默認是http,若是搭建https的倉庫就改成https。 ui_url_protocol = https #可選的https證書配置地址 ssl_cert = /root/cert/bakreg.cn.crt ssl_cert_key = /root/cert/bakreg.cn.key #用於在複製策略中加密或解密遠程註冊表的密碼的密鑰路徑。secretkey_path不須要修改。若是必須修改它,你須要在/root/harbor/docker-compose.yml中手動調整路徑,由於它們是硬編碼。 secretkey_path = /data #郵件設置,發送重置密碼郵件時使用 #email_identity做爲用戶名 email_identity = email_server = 郵箱的smtp服務器域名 email_server_port = 25 email_username = email_password = email_from = email_ssl = false email_insecure = false #管理員admin的登陸密碼。默認是Harbor12345 harbor_admin_password = Harbor12345 #認證方式。默認是db_auth,支持多種認證方式,如數據庫認證(db_auth)、LADP(ldap_auth)。 auth_mode = db_auth #LDAP認證時配置項(這項能夠登陸後配置也能夠)。 ldap_url = # LDAP URL ldap_searchdn = # LDAP 搜索DN ldap_search_pwd = # LDAP 搜索DN的密碼 ldap_basedn = # LDAP 基礎DN ldap_filter = # LDAP 過濾器 ldap_uid = # LDAP 用戶uid的屬性 ldap_scope = 2 ldap_timeout = 5 #是否開啓註冊。on開啓,off關閉。 self_registration = off #Token有效時間。默認30分鐘。 token_expiration = 30 #標記用戶建立項目權限控制。默認是everyone(容許全部人建立),也能夠設置爲adminonly(只能管理員才能建立) project_creation_restriction = everyone
注:暫時先更改這幾行便可啓動,其餘功能按照需求更改!
systemctl start docker systemctl enable docker
cd /data/harbor/
./install.sh
注:以上截圖說明harbor的https協議加密成功!
//關閉harbor服務(先進入harbor目錄)
docker-compose stop
//開啓harbor服務(先進入harbor目錄)
docker-compose up -d
注:有童鞋可能不理解爲啥不用IP地址訪問,由於咱們是針對域名作的https證書,因此只能使用域名訪問才能使用自籤的證書!可是問題又來了,爲啥瀏覽器會這樣呢?緣由是windows沒有針對這個域名作域名解析,怎麼才能讓他訪問到呢?
設置方式:(windows系統)
//打開windows路徑
C:\Windows\System32\drivers\etc
//點擊這個特殊的hosts文件,並用記事本方式打開
注:將harbor服務器的域名和IP記錄到windows系統中,便可實現域名訪問網頁!
注:以上截圖訪問方式使用的是https加密訪問可是須要咱們將證書導入瀏覽器才行!
//點擊高級
//點擊添加列外
//點擊確認安全列外
注:以上截圖已經能夠訪問到網頁,說明nginx加密成功或者證書導入成功!其餘的瀏覽器導入證書方式不同,可是超級簡單,自行百度便可!
//輸入用戶名密碼
注:默認的用戶名admin,密碼Harbor12345。
//點擊登錄
注:建立用戶時按照密碼複雜要求設置密碼!
docker login harbor.123.com
報錯:Error response from daemon: Get https://harbor.123.com/v1/users/: x509: certificate signed by unknown authority
解決方式
一、centos7系統以上報錯的緣由是由於自籤的證書沒有加入到系統級別信任,只須要將harbor.123.com.crt拷貝到/etc/pki/ca-trust/source/anchors/reg.你的域名.crt,而後須要執行命令update-ca-trust,最後重啓harbor和docker便可!
cp harbor.123.com.crt /etc/pki/ca-trust/source/anchors/reg.harbor.123.com.crt
二、ubunt16.04系統以上報錯的緣由是由於自籤的證書沒有加入到系統級別信任,只須要將harbor.123.com.crt拷貝到/usr/local/share/ca-certificates/reg.你的域名.crt,而後執行命令update-ca-certificates,最後重啓harbor和docker便可!
docker tag 原鏡像名 harbor.123.com /項目名/打標記的鏡像名
注:若是是普通用戶推送鏡像,切記須要建立項目,否則上傳給默認的library項目沒有權限,只有admin用戶有推送library項目的權利。
//先登陸鏡像庫
docker login harbor.123.com Username: admin Password:
//推送鏡像到倉庫
docker push harbor.123.com/library/tomcat:v1
注:若是是普通用戶推送鏡像,那麼以上的library項目名換成本身的項目名便可!
假設建的用戶爲,helen,則須要在倉庫新建一個名爲 helen 的項目,不然會推送失敗
//刪除打標記的鏡像
docker rmi -f harbor.123.com/library/tomcat:v1
//拉取倉庫的tomcat鏡像
docker pull 鏡像的完整路徑
注:可能有童鞋會說,若是不知道怎麼填寫完整路徑怎麼辦,也不知道怎麼下載鏡像的,那麼就登陸上網頁harbor,而後點擊你要下載的那個鏡像後邊pull命令提醒,例如:
docker logout harbor的域名
因爲經過openssl建立的是不可信的,直接拉取或登陸時會報「x509: certificate signed by unknown authority」,故須要讓客戶機信任該證書。
scp /data/cert/harbor.123.com.crt root@192.168.152.91:/root/
cat harbor.123.com.crt >> /etc/pki/tls/certs/ca-bundle.crt
echo "192.168.152.170 harbor.123.com" >>/etc/hosts
//進入harbor目錄
cd /data/harbor/
//關閉harbor服務
docker-compose stop
systemctl restart docker
//進入harbor目錄
cd /data/harbor/
//啓動harbor服務
docker-compose up –d
docker login harbor.123.com
注:廢話就很少說了,其餘的打標記、上傳、下載,方式都同樣!
Error: Status 404 trying to push repository test/app: "{\"timestamp\":1555033311968,\"status\":404,\"error\":\"Not Found\",\"message\":\"No message available\",\"path\":\"/v1/repositories/test/app/\"}"
這個問題,須要從新對前端頁面和後臺配置,作https證書
須要兩步:
Error response from daemon: Get https://hub.**.cn/v1/users/: x509: certificate signed by unknown authority
處理方法:
[root@test cert]# cat hub.***.cn.crt >> /etc/pki/tls/certs/ca-bundle.crt [root@test cert]# systemctl restart docker [root@test cert]# docker login hub.***.cn Username: xxx Password: Login Succeeded
不管經過接口或者web界面刪除鏡像,都只是軟刪除,雖然查詢不到,可是鏡像文件仍是保存在磁盤上,所以須要經過如下方法進行垃圾回收,清理釋放磁盤
#進入導harbor yaml文件所在目錄 cd /usr/local/src/harbor #中止harbor docker-compose stop #使用清理鏡像進行垃圾回收 #使用--dry-run 參數進行預覽,不使用則進行清理 docker run -it --name gc --rm --volumes-from registry vmware/registry:1.5.3-photon garbage-collect /etc/registry/config.yml #從新啓動harbor docker-compose start
建議的方法是,先在web界面所有刪除,而後再執行上面gc的方法