?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
在用HTTPS運行碼頭您了解到,默認情況下,Docker通過非聯(lián)網(wǎng)的Unix套接字運行,為了讓Docker客戶端和守護進程在HTTPS上安全地通信,必須啟用TLS。TLS確保注冊表端點的真實性,并加密到/來自注冊表的通信量。
本文演示如何確保Docker注冊表(即服務(wù)器)與Docker守護進程(即客戶端)之間的流量已加密,并使用基于證書的客戶端 - 服務(wù)器身份驗證進行了正確的身份驗證。
我們將向您展示如何為注冊表安裝證書頒發(fā)機構(gòu)(CA)根證書以及如何設(shè)置客戶端TLS證書以進行驗證。
通過/etc/docker/certs.d
使用與注冊表主機名相同的名稱(例如,localhost
)創(chuàng)建目錄來配置自定義證書。所有*.crt
文件都作為CA根添加到此目錄。
注意:從Docker 1.13開始,在Linux上,任何根證書頒發(fā)機構(gòu)都將與系統(tǒng)默認值(即主機的根CA集合)合并。在1.13和Windows之前,只有在沒有提供自定義根證書時才會使用系統(tǒng)默認證書。
一個或多個的存在<filename>.key/cert
對向Docker表示,訪問所需的存儲庫需要自定義證書。
注意:如果有多個證書,將按字母順序嘗試每個證書。如果存在認證錯誤(例如403,404,5xx等),Docker將繼續(xù)嘗試使用下一個證書。
以下說明了具有自定義證書的配置:
/etc/docker/certs.d/ <-- Certificate directory └── localhost:5000 <-- Hostname:port ├── client.cert <-- Client certificate ├── client.key <-- Client key └── ca.crt <-- Certificate authority that signed the registry certificate
前面的示例是特定于操作系統(tǒng)的,僅用于說明性目的。在創(chuàng)建操作系統(tǒng)提供的捆綁證書鏈時,您應(yīng)該參考操作系統(tǒng)文檔。
您將使用OpenSSL的genrsa
和req
命令首先生成RSA密鑰,然后使用密鑰創(chuàng)建證書。
$ openssl genrsa -out client.key 4096$ openssl req -new -x509 -text -key client.key -out client.cert
注這些TLS命令將只在Linux上生成一組有效的證書。MacOS中的OpenSSL版本與Docker要求的證書類型不兼容。
Docker守護進程解釋.crt
文件作為CA證書和.cert
文件作為客戶端證書。如果CA證書意外地被授予擴展名.cert
而不是正確的.crt
擴展時,Docker守護進程記錄以下錯誤消息:
Missing key KEY_NAME for client certificate CERT_NAME. Note that CA certificates should use the extension .crt.
如果沒有端口號訪問Docker注冊表,請不要將端口添加到目錄名。下面顯示默認端口443上注冊表的配置,docker login my-https.registry.example.com
*
/etc/docker/certs.d/ └── my-https.registry.example.com <-- Hostname without port ├── client.cert ├── client.key └── ca.crt
使用可信映像
保護Docker守護進程套接字