Harbor 默認 HTTP 請求註冊服務器,並不分發任何證書。使得其配置相對簡單。然而,強烈建議在生產環境中加強安全性。Harbor 有一個 Nginx 實例爲全部服務提供反向代理,你能夠在 Nginx 配置中啓用 HTTPS 。node
假定你的倉庫的 hostname 是 reg.yourdomain.com,而且其 DNS 記錄指向主機正在運行的 Harbor。首先,你須要獲取一個 CA 證書。證書一般包含一個 .crt 文件和 .key 文件,例如, yourdomain.com.crt 和 yourdomain.com.key。nginx
在測試或開發環境中,你可能會選擇使用自簽名證書,而不是購買 CA 證書。下面的命令會生成自簽名證書:docker
1) 生成自簽名 CA 證書:瀏覽器
openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout ca.key \ -x509 -days 365 -out ca.crt
2) 生成證書籤名請求:安全
若是使用 FQDN (徹底限定域名) 如 reg.yourdomain.com 做爲你的註冊服務器鏈接,那你必須使用 reg.yourdomain.com 做爲 CN (Common Name)。另外,若是使用 IP 地址做爲你的註冊服務器鏈接,CN 能夠是你的名字等等:bash
openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \ -out yourdomain.com.csr
3) 生成註冊服務器證書:服務器
假定你使用相似 reg.yourdomain.com 這樣的 FQND 做爲註冊服務器鏈接,運行下面的命令爲你的註冊服務器生成證書:app
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt
假定你使用 IP , 如 192.168.1.101 做爲註冊服務器鏈接,你能夠運行如下命令:dom
echo subjectAltName = IP:192.168.1.101 > extfile.cnf openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com .crt
在取得 yourdomain.com.crt 和 yourdomain.com.key 文件後,你能夠將它們放置在如 /root/cert/
目錄下:測試
cp yourdomain.com.crt /root/cert/ cp yourdomain.com.key /root/cert/
接下來,編輯 harbor/make/harbor.cfg, 更新 hostname
, protocol
, ssl_cert
和 ssl_cert_key
屬性:
#set hostname hostname = reg.yourdomain.com #set ui_url_protocol ui_url_protocol = https ...... #The path of cert and key files for nginx, they are applied only the protocol is set to https ssl_cert = /root/cert/yourdomain.com.crt ssl_cert_key = /root/cert/yourdomain.com.key
爲 Harbor 生成配置文件:
# 工做目錄 harbor/make ./prepare
若是 Harbor 已經在運行,則中止並刪除實例。你的鏡像數據將保留在文件系統中。
# 工做目錄 harbor/make # 在運行 compose 前, 需將 docker-compose.tpl 文件重命名爲 docker-compose.yaml mv docker-compose.tpl docker-compose.yaml docker-compose down
最後,重啓 Harbor:
docker-compose up -d
在爲 Harbor 配置 HTTPS 完成後,你能夠經過如下步驟對它進行驗證:
打開瀏覽器,並輸入地址:https://reg.yourdomain.com。應該會顯示 Harbor 的界面。
在裝有 Docker daemon 的機器上,確保 Docker engine 配置文件中沒有配置 "-insecure-registry",而且,你必須將已生成的 ca.crt 文件放入 /etc/docker/certs.d/yourdomain.com(或 / etc/docker/certs.d/your registry host IP) 目錄下,若是這個目錄不存在,則建立它。
若是你將 nginx 的 443 端口映射到其餘端口上了,你須要建立目錄的爲 /etc/docker/certs.d/yourdomain.com:port(/etc/docker/certs.d/your registry host IP:port)。而後,運行以下命令驗證是否安裝成功。
docker login reg.yourdomain.com
若是你將 nginx 443 端口映射到其餘端口上,則須要在登陸時添加端口號,如:
docker login reg.yourdomain.com:port
1. 你多是經過證書發行商獲取中間證書。在這種狀況下,你應該合併中間證書與自簽證書,經過以下命令便可實現:
cat intermediate-certificate.pem >> yourdomain.com.crt
2. 在一些運行着 docker daemon 的系統中,你可能須要操做系統級別的信任證書。
在 Ubuntu 上, 能夠經過如下命令來完成:
cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt update-ca-certificates
在 Red Hat (CentOS etc) 上, 命令以下:
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt update-ca-trust