Harbor 企業級私有倉庫 Ubuntu16.04 搭建及使用

1、Harbor簡介

1.一、什麼是Harbor

幾個VMware中國的人搞了一個容器鏡像倉庫。
Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器。前端

1.二、Harbor架構

下圖展現harbor主要的功能組件和信息流向:

主要組件包括proxy,他是一個nginx前端代理,主要是分發前端頁面ui訪問和鏡像上傳和下載流量,上圖中經過深藍色先標識;ui提供了一個web管理頁面,固然還包括了一個前端頁面和後端API,底層使用mysql數據庫;registry是鏡像倉庫,負責存儲鏡像文件,當鏡像上傳完畢後經過hook通知ui建立repository,上圖經過紅色線標識,固然registry的token認證也是經過ui組件完成;adminserver是系統的配置管理中心附帶檢查存儲用量,ui和jobserver啓動時候回須要加載adminserver的配置,經過灰色線標識;jobsevice是負責鏡像複製工做的,他和registry通訊,從一個registry pull鏡像而後push到另外一個registry,並記錄job_log,上圖經過紫色線標識;log是日誌彙總組件,經過docker的log-driver把日誌彙總到一塊兒,經過淺藍色線條標識。node

1.三、Harbor功能

1.3.一、用戶管理

基於角色的訪問控制--RBAC。用戶分爲三種角色:項目管理員(MDRWS)、開發人員(RWS)和訪客(RS),固然還有一個最高管理員權限admin系統管理員。
M:管理、D:刪除、R:讀取、W:寫入、S:查詢,很是細緻的權限管理體系。固然一個用戶能夠在不一樣的項目裏面扮演不一樣角色,這個和現實的用戶管理體系很是吻合。python

1.3.二、項目管理

項目管理是系統最主要的一個功能模塊,項目是一組鏡像倉庫的邏輯集合,是權限管理和資源管理的單元劃分。一個項目下面有多個鏡像倉庫,而且關聯多個不一樣角色的成員,鏡像複製也是基於項目的,經過添加複製規則,能夠將項目下面的鏡像從一個harbor遷移到另外一個harbor,而且能夠經過日誌查看複製過程,並有retry機制。mysql

1.3.三、配置管理和日誌查詢

配置管理主要是配置harbor的認證模式,企業內部使用,一般都是對接到公司LDAP上面,固然harbor也支持數據庫認證;還能夠設置token的有效時間。用戶對鏡像的pull和push操做均可以被harbor記錄下來,這樣爲排查文件提供了重要手段。harbor還集成了clair鏡像掃描功能,它是cereos開發的一款漏洞掃描工具,能夠檢查鏡像操做系統以及上面安裝包是否與已知不安全的包版本相匹配,從而提升鏡像安全性。linux

1.3.四、Harbor高可用部署

經過三個harbor完成高可用部署,前面經過負載均衡器對外提供服務。共享數據庫與緩存。結構以下:nginx

本章節內容參考原文:https://blog.csdn.net/u010278923/article/details/77941995 git

2、基礎環境搭建

2.一、docker搭建

若是須要詳細瞭解docker有他相關操做,請詳見《docker在Ubuntu下1小時快速學習》如下操做步驟均在root用戶下操做,2個版本任選其一github

2.1.一、獲取docker_17.03.2~ce的deb下載地址

一、進入https://download.docker.com/linux/ubuntu/dists/頁面
二、在頁面中會看到ubuntu不一樣版本的代號,選擇本身對應的版本進入,這次安裝的是ubuntu16.04,所以選擇xenial鏈接進入web


三、而後一路選擇xenial/pool/stable/amd64/,stable是穩定版本,ubuntu須要的是amd64的軟件格式
四、在https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/頁面就能找打所須要的穩定版本dockersql


五、右鍵點擊在所須要的版本上,選擇複製鏈接地址,便可獲得下載地址路徑,以下:
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

2.1.二、下載安裝docker-ce_17.03.2~ce版本

一、檢查內核是否符合要求,Docker 要求 Ubuntu 系統的內核版本高於 3.10 ,建議在Ubuntu14.04版本

root@duke:/var/cache/apt/archives# uname -r
3.13.0-135-generic

二、安裝docker

root@duke:~/docker# wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
--2017-12-19 19:30:29--  https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
正在解析主機 download.docker.com (download.docker.com)... 52.85.158.200, 52.85.158.223, 52.85.158.109, ...
正在鏈接 download.docker.com (download.docker.com)|52.85.158.200|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 19183424 (18M) [application/x-debian-package]
正在保存至: 「docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb」
docker-ce_17.03.2~ce-0~ubuntu-xenial_ 100%[======================================================================>]  18.29M  26.0KB/s    in 11m 35s 
2017-12-19 19:42:05 (27.0 KB/s) - 已保存 「docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb」 [19183424/19183424])
root@duke:~/docker# dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

三、啓動docker 後臺服務

root@duke: service docker start
start: Job is already running: docker

2.1.三、獲取docker-1.13.1的tgz包下載地址

一、進入https://github.com/moby/moby/releases頁面


二、點擊按鈕,進入以頁面就能夠根據選擇選取版本


三、當前要選擇docker-ce_17.03.2~ce或者docker-1.13.1,所以通過翻頁後,找到對應版本,點擊進入頁面,找到downloads信息後,就能夠找ubuntu系統上進行下載


四、Docker的tgz包加壓後,並不能加載到系統服務中,因此不太推薦此種方式安裝,建議仍是採用deb包安裝方式,能夠省去沒必要要的麻煩

2.1.4下載docker-1.13.1.tgz版本

一、檢查內核是否符合要求,Docker 要求 Ubuntu 系統的內核版本高於 3.10 ,建議在Ubuntu14.04版本

root@duke:/var/cache/apt/archives# uname -r
3.13.0-135-generic

二、安裝docker

root@duke:~/docker# wget https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz
--2017-12-20 13:57:23--  https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz
正在解析主機 get.docker.com (get.docker.com)... 54.182.1.40, 54.182.1.36, 54.182.1.148, ...
正在鏈接 get.docker.com (get.docker.com)|54.182.1.40|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度: 27851024 (27M) [application/x-tar]
正在保存至: 「docker-1.13.1.tgz」
docker-1.13.1.tgz                     100%[======================================================================>]  26.56M  56.1KB/s    in 9m 35s  
2017-12-20 14:07:00 (47.3 KB/s) - 已保存 「docker-1.13.1.tgz」 [27851024/27851024])

2.二、docker-compoes搭建

如下操做步驟均在root用戶下操做,2個方法任選其一

2.2.1 離線安裝docker-compoes

一、運行如下命令下載最新版本的docker-compose並進行安裝

curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

二、更改二進制文件的權限,使其可以運行

chmod +x /usr/local/bin/docker-compose

三、測試安裝

docker-compose --version

2.2.2 在線安裝docker-compoes

一、安裝python源

apt-get update
apt-get install python-pip

二、刪除老版docker-compose

pip uninstall docker-compose

三、安裝docker-compose

pip install docker-compose

四、測試安裝

docker-compose --vesion

3、Harbor環境要求

3.一、硬件要求

資源 配置 描述
CPU 最少 2 CPU 4CPU(推薦)
內存 最少 4GB 8GB(推薦)
磁盤 * *

3.二、軟件要求

軟件名 版本
描述
Python 2.7或更高版本 注意: 你可能必須在Linux發行版(Gentoo,Arch)上安裝Python,默認狀況下沒有安裝Python解釋器
Docker 1.10或更高版本 有關安裝說明,請參考: https://docs.docker.com/engine/installation/
Docker-Compose 1.6.0或更高版本 有關安裝說明,請參考: https://docs.docker.com/compose/install/
Openssl 推薦最新版本 爲Harbor生成證書和密鑰

3.三、網絡要求

端口 協議
描述
443 HTTPS Harbor UI和API將接受此端口上的https協議請求
4443 HTTPS 只有在啓用Notary時才須要鏈接到Docker Content Trust服務
80 HTTP Harbor UI和API將接受此端口上的http協議請求

4、Harbor版本獲取

官方本獲取頁面,點擊下載
版本分爲在線安裝板和離線安裝版本,根據需求選擇對應版本下載便可。
在線版本和離線版本安裝方法同樣,本文以離線安裝爲主。

5、單節點離線Harbor無SSL認證搭建

5.一、解壓壓縮包

tar xvf harbor-offline-installer-v1.7.0-rc2.tgz

5.二、Harbor配置參數說明

【注意】:因爲Harbor安裝時是以容器方式安裝,因此在執行安裝前,必須先完成相關配置工做。

解壓壓縮包會獲得harbor文件夾,harbor.cfg配置文件位於文件夾根目錄。在harbor.cfg中有兩類參數,必需參數和可選參數。

參數
說明
必要參數 須要在配置文件中設置這些參數。若是用戶更新harbor.cfg並運行install.sh腳本以從新安裝Harbor,更改的參數將生效。
可選參數 這些參數對於更新是可選的,即用戶能夠將它們保留爲默認值,並在啓動Harbour後在Web UI上更新它們。若是已經配置harbor.cfg,這些參數只會在首次啓動Harbour時生效。harbor.cfg將忽略對這些參數的後續修改。
【注意】:若是你選擇經過UI設置這些參數,請務必在Harbour啓動後當即執行此操做。
特別是,你必須在Harbour中註冊或建立新用戶以前,設置所需的auth_mode。當系統中有用戶時(除默認管理員用戶外),沒法更改auth_mode。

必要參數

【注意】:至少要修改hostname
參數名
參數說明
hostname 目標主機的主機名,用於訪問UI和Harbor服務。它應該是目標計算機的IP地址或域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1做爲主機名,由於外部客戶端須要訪問Harbor服務!
ui_url_protocol ( http或https。默認爲http)用於訪問UI和令牌/通知服務的協議。若是啓用了公證,則此參數必須爲https。默認狀況下,這是http。要設置https協議,請參閱使用HTTPS訪問配置Harbor。
db_password 用於db_auth的MySQL數據庫的root密碼。生產環境請修改此密碼
max_job_workers (默認值爲3)做業服務中的最大複製工做數。對於每一個鏡像複製做業,程序將存儲庫的全部標記同步到遠程目標。增長此數量能夠在系統中實現更多併發複製做業。可是,因爲每一個複製進程都消耗必定的網絡/CPU/IO資源,請根據主機的硬件資源仔細選擇該參數的值。
customize_crt (on或off,默認爲on),若是此屬性on,準備腳本建立私鑰和根證書,用於生成/驗證registry的令牌。當外部源提供密鑰和根證書時,將此屬性設置爲off。有關詳細信息,請參閱自定義密鑰和harbor令牌服務證書。
ssl_cert SSL證書的路徑,僅在協議設置爲https時應用
ssl_cert_key SSL密鑰的路徑,僅在協議設置爲https時應用
secretkey_path 用於加密或解密複製策略中遠程Harbor密碼的密鑰路徑。
log_rotate_count 日誌文件在被刪除以前會被輪轉log_rotate_count次。若是count爲0,則刪除舊版本而不是輪轉。
log_rotate_size 僅當日志文件大於log_rotate_size字節時纔會輪轉日誌文件。若是大小後跟k,則假定大小以千字節爲單位。若是使用M,則大小以兆字節爲單位,若是使用G,則大小爲千兆字節。尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。

可選參數

參數名
參數說明
Email settings Harbor須要這些參數才能向用戶發送「密碼重置」電子郵件,而且僅在須要該功能時才作配置。另外,請注意,在默認狀況下SSL鏈接沒有啓用,若是你的SMTP服務器須要SSL,那麼你應該經過設置email_ssl = TRUE參數來啓用SSL,但不支持STARTTLS。若是電子郵件服務器使用自簽名證書或不受信任證書,則須要設置email_insecure = true。有關email_identity的詳細說明,請參閱rfc2595
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_identity =
- email_username = sample_admin@mydomain.com
- email_password = abc
- email_from = admin [sample_admin@mydomain.com(mailto:sample_admin@mydomain.com)
- email_ssl = false
- email_insecure = false
harbor_admin_password 管理員的初始密碼。此密碼僅在Harbor首次啓動時生效。以後將忽略此設置,而且應在UI中設置管理員密碼。請注意:默認用戶名/密碼爲admin/Harbor12345
auth_mode 使用的身份驗證類型。默認狀況下,它是db_auth,即憑據存儲在數據庫中。對於LDAP身份驗證,請將其設置爲ldap_auth。重要信息:從現有Harbor實例升級時,必須確保在啓動新版本的Harbor以前,harbor.cfg配置文件中auth_mode相同。不然,用戶可能沒法在升級後登陸。
ldap_url LDAP鏈接URL(例如ldaps://ldap.mydomain.com)。 僅在auth_mode設置爲ldap_auth時使用。
ldap_searchdn 具備搜索LDAP/AD服務器權限的用戶的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。
ldap_search_pwd ldap_searchdn指定的用戶密碼。
ldap_basedn 查找用戶的基本DN,例如ou=people,dc=mydomain,dc=com。 僅在auth_mode設置爲ldap_auth時使用。
ldap_filter 用於查找用戶的搜索過濾器,例如(objectClass=person)。
ldap_uid 用於在LDAP搜索期間匹配用戶的屬性,它能夠是uid,cn,email或其餘屬性。
ldap_scope 搜索用戶的範圍,0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-LDAP_SCOPE_SUBTREE。默認值爲2。
self_registration ( on或off。默認on)啓用/禁用用戶自助註冊功能。禁用時,新用戶只能由管理員用戶建立,只有管理員能夠在Harbor中建立新用戶。 注意:當auth_mode設置爲ldap_auth時,始終禁用自助註冊功能,並忽略此設置。
token_expiration 令牌服務建立的令牌到期時間(以分鐘爲單位),默認爲30分鐘。
project_creation_restriction 用於控制用戶有權建立項目的設置。默認狀況下,每一個人均可以建立一個項目,設置爲「adminonly」,只有管理員才能建立項目。

配置存儲後端(可選)
默認狀況下,Harbor將鏡像存儲在本地文件系統中。在生產環境中,能夠考慮使用其餘存儲後端而不是本地文件系統,如S3,OpenStack Swift,Ceph等。須要更新的是storage文件中的部分common/templates/registry/config.yml。例如,若是使用Openstack Swift做爲存儲後端,則該部分可能以下所示:

storage:
  swift:
    username: admin
    password: ADMIN_PASS
    authurl: http://keystone_addr:35357/v3/auth
    tenant: admin
    domain: default
    region: regionOne
    container: docker_images
【注意】:有關注冊表存儲後端的詳細信息,請參閱 registry配置參考。

5.三、Harbor自定義監聽端口

默認狀況下,Harbor監聽80(HTTP)和443(HTTPS),若是端口已經被佔用,可使用自定義端口。

對於HTTP協議
一、修改 docker-compose.yml

將第一個80修改成自定義端口,例如8888:80。

proxy:
    image: goharbor/nginx-photon:v1.7.0
    container_name: nginx
    restart: always
    cap_drop:
      \- ALL
    cap_add:
      \- CHOWN
      \- SETGID
      \- SETUID
      \- NET_BIND_SERVICE
    volumes:
      \- ./common/config/nginx:/etc/nginx:z
    networks:
      \- harbor
    dns_search: .
    ports:
           \- 8888:80        將80端口映射到8888
           \- 8443:443   將443端口映射到8443
      \- 4443:4443
    depends_on:
      \- postgresql
      \- registry
      \- core
      \- portal
      \- log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://192.168.0.2:1514"
        tag: "proxy"

二、修改harbor.cfg,將8888端口添加到參數「hostname」

hostname = 192.168.0.2:8888
【注意】:在啓用http的狀況下,https的將不能被登錄,同時SSL認證也失效。

5.四、安裝Harbor

harbor文件夾中有install.sh腳本,一旦harbor.cfg和存儲後端(可選)配置完成,就能夠鏡像Harbor安裝。請注意,在線安裝須要一些時間從Docker hub下載Harbor鏡像,具體根據實際網絡狀況。
因爲Harbor已與Notary和Clair集成(用於漏洞掃描),因此存在如下4中安裝,任選其一便可:

  • 默認安裝(沒有Notary/Clair)
  • 使用Notary安裝
  • 使用Clair安裝
  • 同時安裝Clair和Notary
【注意】:由於本章節沒有采用HTTPS方式安裝,因此只能選擇默認安裝方式進行安裝。

5.4.一、默認安裝(沒有Notary/Clair)

sudo ./install.sh

Harbor已與Notary和Clair集成(用於漏洞掃描)。可是,默認不安裝Notary或Clair服務。若是一切正常,應該可以打開瀏覽器訪問http://192.168.0.2:8888/ 上的管理門戶(192.168.0.2:8888harbor.cfg配置的hostname,默認管理員用戶名/密碼爲:admin/Harbor12345)。以下圖:


登陸管理門戶並建立一個新項目,例如: myproject。而後,可使用docker命令登陸和推送鏡像。

【注意】:默認狀況下,Harbor的默認安裝使用HTTP協議,而Docker默認信任https協議。
因此,要想docker命令登陸和推送鏡像,
須要添加 "insecure-registries":["192.168.0.2:8888"]參數到docker的 /etc/docker/daemon.json配置文件中,
並重啓docker服務。


可使用下面命令進行驗證是否搭建成功

docker login 192.168.0.2:8888

過程以下:

root@duke:/etc/docker# docker login 192.168.0.2:8888
Username (admin): 輸入帳戶:admin
Password: 輸入默認密碼:Harbor12345
Login Succeeded

6、單節點離線Harbor有SSL認證搭建

6.一、配置自定義CA認證

6.1.一、建立root CA私鑰

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

執行步驟以下:

root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
Generating a 4096 bit RSA private key
.............................................++
.............................................++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:NanJing
Locality Name (eg, city) []:NanJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:rancher
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:duke
Email Address []:xxxxx@126.com

6.1.二、爲服務端(web)生成證書籤名請求文件

若是你使用相似demo.rancher.com的FQDN域名訪問,則須要設置demo.rancher.com做爲CN;若是你使用IP地址訪問,CN則爲IP地址:

openssl req -newkey rsa:4096 -nodes -sha256 -keyout demo.rancher.com.key -out  demo.rancher.com.csr

或者

openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0.2.csr

執行步驟以下:

【注意】:
Commone Name必定要是你要授予證書的FQDN域名或主機名,而且不能與生成root CA設置的Commone Name相同。
challenge password能夠不填。
root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0.2.csr
Generating a 4096 bit RSA private key
....................................................................++
....................................................................++
writing new private key to '192.168.0.2.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:NanJing
Locality Name (eg, city) []:NanJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:RANCHER
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:192.168.0.2
Email Address []:xxxxx@126.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:附屬屬性修改密碼,能夠不填
An optional company name []:附屬屬性另外一個公司名稱,能夠不填

6.1.三、用1.1建立的CA證書給1.2生成的簽名請求進行簽名

openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.0.2.crt

執行步驟以下:

root@duke:~# openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.0.2.crt
Signature ok
subject=/C=CN/ST=NanJing/L=NanJing/O=RANCHER/OU=info technology/CN=192.168.0.2/emailAddress=xxxxx@126.com
Getting CA Private Key

6.1.四、使用IP進行簽名

若是你使用IP,例如192.168.0.2來鏈接,則能夠改成運行如下命令

echo 'subjectAltName = IP:192.168.0.2' > extfile.cnf
openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out  192.168.0.2.crt

執行步驟以下:

root@duke:~# echo 'subjectAltName = IP:192.168.0.2' > extfile.cnf
root@duke:~# openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 192.168.0.2.crt
Signature ok
subject=/C=CN/ST=NanJing/L=NanJing/O=RANCHER/OU=info technology/CN=192.168.0.2/emailAddress=xxxxx@126.com
Getting CA Private Key

【注意】:subjectAltName後的IP不需添加端口。

6.1.五、檢查文件

通過上面步驟操做後,會生成ca.crt、ca.srl、ca.key、192.168.0.2.crt、192.168.0.2.key、192.168.0.2.csr、extfile.cnf這幾個文件。

執行步驟以下:

root@duke:~# ls
192.168.0.2.crt 192.168.0.2.key ca.crt ca.srl docker-1.13.1.tgz kubectl shipyard var 模板 圖片 下載 桌面
192.168.0.2.csr anaconda3 ca.key docker extfile.cnf mapd-docker-storage tigervncserver_1.6.80-4_amd64.deb 公共的 視頻 文檔 音樂

6.二、Harbor配置

6.2.一、配置harbor文件

若是要啓用SSL,並進行HTTPS登錄,就必須配置harbor.cfg如下配置

hostname = 192.168.0.2:8443             在修改了默認端口狀況下,必須配置端口,此處爲8443,不配置將沒法保證 docker login的正常登錄
ui_url_protocol = https              要啓用SSL認證,就必須配置爲https
customize_crt = on                   要啓用SSL認證,就必須配置爲on
ssl_cert = /data/cert/server.crt     私有證書存放地址
ssl_cert_key = /data/cert/server.key 私有密鑰存放地址
secretkey_path = /data               配置目錄

### 6.2.二、配置harbor的自定義CA認證 複製6.1章節生成的密鑰到指定的祕鑰目錄 ``` cp 192.168.0.2.crt /data/cert/server.crt cp 192.168.0.2.key /data/cert/server.key ``` ## 6.三、Harbor自定義監聽端口 默認狀況下,Harbor監聽80(HTTP)和443(HTTPS),若是端口已經被佔用,可使用自定義端口。 **對於HTTPS協議** **一、修改 docker-compose.yml** 將第一個443修改成自定義端口,例如8443:443。

proxy:
    image: goharbor/nginx-photon:v1.7.0
    container_name: nginx
    restart: always
    cap_drop:
      \- ALL
    cap_add:
      \- CHOWN
      \- SETGID
      \- SETUID
      \- NET_BIND_SERVICE
    volumes:
      \- ./common/config/nginx:/etc/nginx:z
    networks:
      \- harbor
    dns_search: .
    ports:
           \- 8888:80        將80端口映射到8888
           \- 8443:443   將443端口映射到8443
      \- 4443:4443
    depends_on:
      \- postgresql
      \- registry
      \- core
      \- portal
      \- log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://192.168.0.2:1514"
        tag: "proxy"

二、修改harbor.cfg,將8443端口添加到參數「hostname」

hostname = 192.168.0.2:8443
【注意】:在啓用https的狀況下,http的將不能被登錄,同時啓用了SSL認證。

6.四、安裝Harbor

harbor文件夾中有install.sh腳本,一旦harbor.cfg和存儲後端(可選)配置完成,就能夠鏡像Harbor安裝。請注意,在線安裝須要一些時間從Docker hub下載Harbor鏡像,具體根據實際網絡狀況。
因爲Harbor已與Notary和Clair集成(用於漏洞掃描),因此存在如下4中安裝,任選其一便可:

  • 默認安裝(沒有Notary/Clair)
  • 使用Notary安裝
  • 使用Clair安裝
  • 同時安裝Clair和Notary
【注意】:由於本章節沒有采用HTTPS方式安裝,因此只能選擇默認安裝方式進行安裝。

6.4.一、默認安裝(沒有Notary/Clair)

sudo ./install.sh

Harbor已與Notary和Clair集成(用於漏洞掃描)。可是,默認不安裝Notary或Clair服務。若是一切正常,應該可以打開瀏覽器訪問http://192.168.0.2:8888/ 上的管理門戶(192.168.0.2:8888harbor.cfg配置的hostname,默認管理員用戶名/密碼爲:admin/Harbor12345)。以下圖:


管理門戶並建立一個新項目,例如: myproject。而後,可使用docker命令登陸和推送鏡像。

【注意】:默認狀況下,Harbor的默認安裝使用HTTP協議,而Docker默認信任https協議。
因此,要想docker命令登陸和推送鏡像,
須要添加 "insecure-registries":["192.168.0.2:8888"]參數到docker的 /etc/docker/daemon.json配置文件中,
並重啓docker服務。


可使用下面命令進行驗證是否搭建成功

docker login  -u admin -p Harbor12345 192.168.0.2:8443

過程以下:

root@duke:/etc/docker# docker login  -u admin -p Harbor12345 192.168.0.2:8443
Login Succeeded

6.4.二、使用Notary安裝

要使用Notary服務安裝Harbour,請在運行install.sh時添加參數:

sudo ./install.sh --with-notary

注意:使用notary安裝,參數ui_url_protocol必須設置爲「https」。

6.4.三、使用Clair安裝

要使用Clair服務安裝Harbour,請在運行install.sh時添加參數:

sudo ./install.sh --with-clair

6.4.四、同時安裝Clair和Notary

sudo ./install.sh --with-notary --with-clair

6.五、重裝或重配Harbor

6.5.一、默認安裝方式

若是在安裝配置HTTPS的Harbor前,已經默認方式安裝了HTTP的harbor,能夠執行如下操做,前提是同版本操做。

sudo docker-compose down -v  中止並卸載harbor
sudo vim harbor.cfg          從新配置harbor
sudo prepare                 從新生成harbor配置
sudo docker-compose up -d    從新安裝啓動harbor

刪除Harbor的數據庫和圖像數據(用於乾淨的從新安裝)

rm -r /data/database
rm -r /data/registry

6.5.二、與notary或者Clair一塊兒安裝時管理Harbor的生命週期

當Harbour與Notary或者Clair一塊兒安裝時,docker-compose命令須要指定一個或者兩個額外的模板文件。用於管理Harbour生命週期的docker-compose命令是:

sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml [ up|down|ps|stop|start ]
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml [ up|down|ps|stop|start ]

若是要在使用Notary安裝Harbor時更改配置並從新部署Harbour,則應使用如下命令:

sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml down -v
sudo vim harbor.cfg
sudo prepare --with-notary
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml up -d
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml down -v
sudo vim harbor.cfg
sudo prepare --with-notary --with-clair
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml up -d

6.六、故障排除

當Harbor沒法正常工做時,請運行如下命令以查明Harbor的全部容器是否處於UP狀態:

sudo docker-compose ps

若是容器不是UP狀態,檢查目錄容器的日誌文件/var/log/harbor。例如,若是容器harbor-ui未運行,則應查看日誌文件ui.log。

相關文章
相關標籤/搜索