配置Harbor私有Docker鏡像服務使用HTTPS

配置Harbor私有Docker鏡像服務使用HTTPS

在Harbor中使用HTTPS須要一下幾個步驟:node

  • 生成CA證書。
  • 修改Harbor.cfg文件及建立Registry服務。
  • 配置客戶端使用CA證書。

原Harbor官方文檔的修改Nginx的證書步驟已經不須要了,在運行prepare時會自動建立出Nginx的配置文件,檢查一下是否正確便可。nginx

這裏是Harbor的HTTPS配置的快捷指南,更多詳細操做參考:git

一、生成CA證書

這裏假定Registry服務器的IP地址是:192.168.1.8,主要介紹經過IP地址生成證書方法。github

1.1. 創建CA證書發行站點

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

1.2. 建立CA證書生成請求

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

1.3. 建立CA站點文件目錄

demoCA是OpenSSL的證書存儲依賴目錄,創建在與上面的ca.crt的同級目錄下。docker

mkdir demoCA
cd demoCA
touch index.txt
echo '01' > serial
cd ..

建完的目錄結構:瀏覽器

.
..
ca.crt
ca.key
demoCA
...

1.4. 生成CA客戶端證書

echo subjectAltName = IP:192.168.1.8 > extfile.cnf

openssl ca -in 192.168.1.8.csr -out 192.168.1.8.crt -cert ca.crt -keyfile ca.key \
-extfile extfile.cnf -outdir .

二、下載和安裝

Harbor的運行時由多個Docker Container組成,包括:Nginx、MySQL、UI、Proxy、log、JobService六個主要組成部分。能夠從源碼構建安裝,也能夠下載*.tgz安裝包進行安裝。服務器

2.1. 從源碼安裝

git clone https://github.com/vmware/harbor.git

下載源碼後,修改./make/harbor.cfg的內容,而後運行make便可。dom

2.2 下載安裝包

https://github.com/vmware/harbor/releases下載預先構建好的安裝包,而後解壓縮到目錄,修改./make/harbor.cfg的內容,運行install.sh便可。工具

2.3 harbor.cfg修改

主要修改如下幾個地方:測試

#配置Harbor服務的主機IP地址或主機名,注意要與CA證書的徹底一致。
#hostname = reg.mydomain.com
hostname = 192.168.1.8

#配置Harbor使用https
#ui_url_protocol = http
ui_url_protocol = https

#改成上面生成的CA客戶端證書,注意路徑一致,可以使用命令`pwd`得到。
#ssl_cert = /path/to/server.crt
ssl_cert = /home/supermap/docker/192.168.1.8.crt

#ssl_cert_key = /path/to/server.key
ssl_cert_key = /home/supermap/docker/192.168.1.8.key

三、客戶端配置

若是不在客戶端部署證書,docker pull會顯示x509: certificate signed by unknown authority。緣由在於docker engine對HTTP和未配置證書的https連接拒絕按照信任方式訪問。

3.1. 使用非信任連接

若是不在客戶端部署證書,docker pull會顯示x509: certificate signed by unknown authority,在Docker啓動時設置參數 "--insecure-registry IP"便可。客戶端部署證書後,便可直接訪問,再也不報出錯信息。

須要使用service docker restart重啓服務,在Ubuntu 15.04之後版本,須要使用systemctl daemon-reload && systemctl restart docker從新載入服務參數並重啓。

3.2. 在客戶端部署證書

將ca.crt 複製到 docker 客戶端的 /etc/docker/certs.d/yourdomain.com(registry服務器的IP)。例如:

#獲取ca.crt文件,若是目錄不存在,則須要預先手動建立之。 
sudo scp user@192.168.1.8:~/docker/ca.crt /etc/docker/certs.d/192.168.1.8/

** 注意:**

  • 每個客戶端都須要複製上面的ca.crt到Docker相應目錄,而後重啓Docker。
  • 瀏覽器須要添加「訪問例外」,根據提示進行操做。
  • 若是Harbor部署服務器變化,即使IP地址不變,也須要將訪問端的瀏覽器和/etc/docker/certs.d目錄下的證書清除、更新,而後還要重啓Docker。不然,對於同一個證書,由於從新生成後內容不一樣,將會被認爲造假,被拒絕訪問。

若是將nginx 端口 443 設到了其它端口, 則須要建立目錄 /etc/docker/certs.d/yourdomain.com: port(registry IP:port),加上端口號便可,如:192.168.1.8:446

** Linux和MacOS系統須要對證書得到系統級的信任。能夠參考:Adding trusted root certificates to the server**

  • Ubuntu系統使用下面的辦法:
cp 192.168.1.8.crt /usr/local/share/ca-certificates/192.168.1.8.crt
update-ca-certificates
  • MacOS使用下面的辦法:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain 
/root/docker/192.168.1.8.crt

也能夠到瀏覽器中,管理和設置CA證書。對於自簽名的根證書,能夠選擇ca.crt文件直接導入。**而後重啓Docker服務。 **

  • MacOS上,在文件管理器中選中ca.crt文件,鼠標右鍵選擇「加入」,而後打開「鑰匙串」工具,便可看到被加入的證書。而後便可正常使用docker login登錄到Harbor。

四、使用Harbor

在使用https的狀況下,進行了訪問控制,須要帳號登陸進去才能使用。

** 對於向上推送Docker鏡像的帳號,須要到Harbor管理頁面開啓該帳號的「管理員」權限。**

4.1. 建立帳號

到瀏覽器打開連接 https://192.168.1.8/,登陸進去。初始帳號是admin,密碼Harbor12345。而後建立一個帳戶openthings。

4.2. login

docker login 192.168.1.8
#輸入帳號和設置的密碼

4.3. tag

docker tag gispark/openrock 192.168.1.8/gispark/openrock:2016.10

4.4. push

將本機鏡像192.168.1.8/gispark/openrock推送到Registry中。

docker push 192.168.1.8/gispark/openrock:2016.10

4.5. pull

在其它機器上將鏡像拉取下來(也須要預先登陸)。

docker pull 192.168.1.8/gispark/openrock:2016.10

而後就可使用"Docker run ..."運行整個Docker鏡像了。

默認Docker的鏡像存儲在/data目錄下,若是根目錄空間不夠,須要移到其它磁盤,參考:

【Harbor的Docker鏡像存儲路徑修改:http://www.javashuo.com/article/p-obmfijum-gd.html

** 根據本人測試,上面的方法在Docker 1.12.3和Ubuntu 16.0四、MacOS Sierra和ARM上的Raspberry PI(樹莓派)均可以運行。**

相關文章
相關標籤/搜索