1. 程式人生 > >使用HTTPS訪問Docker私有映象倉庫Harbor的配置方法

使用HTTPS訪問Docker私有映象倉庫Harbor的配置方法

由於Harbor未附帶任何證書,因此預設情況下使用HTTP來提供登錄檔請求。 但是,強烈建議為任何生產環境啟用安全性。 Harbor有一個Nginx例項作為所有服務的反向代理,所以可以使用prepare指令碼配置Nginx以啟用https。
考慮到Docker服務訪問Registry已經是預設使用https方式,我們並不希望因為使用Harbor作為映象倉庫,而去修改docker的啟動引數。

獲得證書

假定你的Docker私有倉庫的hostname是reg.yourdomain.com,並且其DNS記錄指向您正在執行Harbor的主機。 您首先應該從CA獲得證書。 證書通常包含a.crt檔案和a.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

建立一個證書請求

如果您使用reg.yourdomain.com等FQDN連線registry主機,則必須使用reg.yourdomain.com作為證書的CN(通用名稱)。 否則,如果是使用IP地址連線您的registry主機,CN可以是任意字串,例如您的名字等:

openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout 172.16
.10.102.key -out 172.16.10.102.csr

生成證書

如果您使用reg.yourdomain.com等FQDN連線registry主機,請執行此命令以生成registry主機的證書:

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

如果您使用IP,例如172.16.10.102來連線registry主機,則可以改為執行以下命令:

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

檢視下都生成了哪些檔案

# ls
172.16.10.102.crt  172.16.10.102.csr  172.16.10.102.key  ca.crt  ca.key  ca.srl  extfile.cnf

安裝和配置

在獲取了yourdomain.com.crt和yourdomain.com.key檔案後,可以將它們放入/root/cert/等目錄中:

  cp yourdomain.com.crt /etc/harbor/ssl
  cp yourdomain.com.key /etc/harbor/ssl

因為我們這個例子中使用的是ip,所以應該執行下面命令:

  cp 172.16.10.102.crt /etc/harbor/ssl
  cp 172.16.10.102.key /etc/harbor/ssl

接下來,編輯檔案harbor.cfg,更新hostname和protocol,並更新屬性ssl_cert和ssl_cert_key:

  #set hostname
  hostname = 172.16.10.102
  #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 = /etc/harbor/ssl/172.16.10.102.crt
  ssl_cert_key = /etc/harbor/ssl/172.16.10.102.key

為Harbor生成配置檔案:

./prepare

如果Harbor已在執行,請停止並刪除現有例項。 您的映象資料會保留在檔案系統中。

docker-compose down  

最後,重啟Harbor服務:

docker-compose up -d

必須將上述步驟中生成的ca.crt複製到/etc/docker/certs.d/reg.yourdomain.com(或您的registry主機IP),如果該目錄不存在,請建立它。 如果您將nginx埠443對映到另一個埠,那麼您應該建立目錄/etc/docker/certs.d/reg.yourdomain.com:port(或您的registry主機IP:port)。

cp ca.crt /etc/docker/certs.d/172.16.10.102/

如果您已將nginx 443埠對映到另一個埠,則需要將埠新增到登入,如下所示:

docker login 172.16.10.102:[PORT]

為Harbor設定HTTPS後,您可以通過以下步驟進行驗證:

  • 開啟瀏覽器並輸入地址:https://172.16.10.102。 它應該顯示Harbor的使用者介面。
  • 在執行Docker守護程序的計算機上,請確保選項“-insecure-registry”不存在。
  • Harbor服務的初始登入賬號為admin/Harbor12345

執行下面docker命令來驗證設定

# docker login 172.16.10.102
Username: admin
Password:
Login Succeeded
[[email protected] harbor]#
# docker tag busybox:latest 172.16.10.102/test-corp/busybox:v1.0
# docker push 172.16.10.102/test-corp/busybox:v1.0
The push refers to repository [172.16.10.102/test-corp/busybox]
f9d9e4e6e2f0: Pushed
v1.0: digest: sha256:5e8e0509e829bb8f990249135a36e81a3ecbe94294e7a185cc14616e5fad96bd size: 527

在瀏覽器頁面中檢視下專案倉庫:
Harbor專案倉庫

故障排除

1、您可以從證書頒發者那裡獲得中間證書intermediate certificate。 在這種情況下,您應該將中間證書與您自己的證書合併以建立證書包。 您可以通過以下命令實現此目的:

cat intermediate-certificate.pem >> yourdomain.com.crt

2、在某些執行docker守護程式的系統上,您可能需要配置作業系統級別信任該證書。
在Ubuntu上,這可以通過以下命令完成:

cp youdomain.com.crt /usr/local/share/ca-certificates/reg.yourdomain.com.crt
update-ca-certificates

在紅帽系統上,則執行以下命令:

cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt
update-ca-trust