一,生成證書
由於Harbor不附帶任何證書,它默認使用HTTP來提供註冊表請求。但是,強烈建議爲任何生產環境啓用安全性。Harbour有一個Nginx實例作爲所有服務的反向代理,您可以使用準備腳本來配置Nginx來啓用https。
1,獲得證書
假設您的註冊表的主機名是reg.yourdomain.com,並且其DNS記錄指向您正在運行Harbor的主機。您首先應該從CA獲得證書。證書通常包含.crt文件和.key文件,例如yourdomain.com.crt和yourdomain.com.key。
在測試或開發環境中,您可以選擇使用自簽名證書而不是CA中的證書。以下命令生成您自己的證書:
創建您自己的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(通用名稱)。否則,如果您使用IP地址來連接您的註冊表主機,CN可以是任何類似您的名字等等:
openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.cdcpsyb.com.key -out reg.cdcpsyb.com.csr
3,生成註冊表主機的證書:
如果您使用的是像reg.yourdomain.com這樣的FQDN 來連接您的註冊表主機,請運行以下命令以生成註冊表主機的證書:
openssl x509 -req -days 365 -in reg.cdcpsyb.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out reg.cdcpsyb.com.crt
如果你使用IP,比如192.168.1.101來連接你的註冊表主機,你可以運行下面的命令:
# ip設置
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 reg.cdcpsyb.com.crt
二、配置和安裝
1,獲取yourdomain.com.crt和yourdomain.com.key文件後,可以將它們放入如下目錄中/root/cert/:
cp yourdomain.com.crt /root/cert/
cp yourdomain.com.key /root/cert/
2,接下來,編輯文件make / harbor.cfg,更新主機名和協議,並更新屬性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
3,爲Harbour生成配置文件:
./prepare
如果Harbor已經運行,請停止並刪除現有的實例。您的圖像數據保留在文件系統中
docker-compose down
4,最後重啓Harbour
docker-compose up -d
爲Harbour設置HTTPS後,您可以通過以下步驟驗證它:
5,驗證訪問(使用foxmail瀏覽器訪問,谷歌不信任)
打開瀏覽器並輸入地址:https://reg.yourdomain.com。它應該顯示Harbor的用戶界面。
6,docker客戶端訪問
-
刪除/etc/docker/daemon.json中的“-insecure-registry”內容。
-
創建/etc/docker/certs.d/reg.yourdomain.com(或您的註冊表主機IP)文件夾,如果有端口則創建/etc/docker/certs.d/reg.yourdomain.com:port(或您的註冊表主機IP:端口)
-
拷貝ca.crt證書到創建文件夾
-
驗證登錄
docker login reg.yourdomain.com
如果您已將nginx 443端口映射到另一個端口,則需要添加要登錄的端口,如下所示:
docker login reg.yourdomain.com:port
7故障排除
您可能會從證書頒發者處獲得中間證書。在這種情況下,您應該將中間證書與您自己的證書合併以創建證書包。您可以通過以下命令來實現此目的:
cat intermediate-certificate.pem >> yourdomain.com.crt
- 在運行docker守護程序的某些系統上,您可能需要在操作系統級別信任該證書。
在Ubuntu上,這可以通過以下命令完成:
cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt
更新CA證書
在Red Hat(CentOS等)上,命令是:
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt
更新CA信任
原文鏈接