使用公開金鑰基礎架構 (PKI) 管理 Swarm 安全性

Docker 內建的 Swarm 模式公開金鑰基礎架構 (PKI) 系統,讓您可以輕鬆安全地部署容器協調系統。Swarm 中的節點使用相互傳輸層安全性 (TLS) 來驗證、授權和加密與 Swarm 中其他節點的通訊。

當您透過執行 docker swarm init 建立 Swarm 時,Docker 會將自身指定為管理節點。預設情況下,管理節點會產生新的根憑證授權單位 (CA) 以及金鑰對,用於保護與加入 Swarm 的其他節點的通訊。如果您願意,可以使用 docker swarm init 命令的 --external-ca 旗標,指定您自己外部產生的根 CA。

管理節點也會產生兩個權杖,用於將其他節點加入 Swarm 時使用:一個工作節點權杖和一個管理節點權杖。每個權杖都包含根 CA 憑證的摘要和隨機產生的密鑰。當節點加入 Swarm 時,加入的節點會使用摘要來驗證來自遠端管理者的根 CA 憑證。遠端管理者使用密鑰來確保加入的節點是已核准的節點。

每次有新節點加入 Swarm 時,管理者都會向該節點發出憑證。憑證包含隨機產生的節點 ID,用於識別憑證通用名稱 (CN) 下的節點和組織單位 (OU) 下的角色。節點 ID 在目前 Swarm 中作為節點生命週期的加密安全節點身分識別。

下圖說明管理節點和工作節點如何使用至少 TLS 1.2 加密通訊。

TLS diagram

以下範例顯示來自工作節點的憑證資訊

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3b:1c:06:91:73:fb:16:ff:69:c3:f7:a2:fe:96:c1:73:e2:80:97:3b
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN=swarm-ca
        Validity
            Not Before: Aug 30 02:39:00 2016 GMT
            Not After : Nov 28 03:39:00 2016 GMT
        Subject: O=ec2adilxf4ngv7ev8fwsi61i7, OU=swarm-worker, CN=dw02poa4vqvzxi5c10gm4pq2g
...snip...

預設情況下,Swarm 中的每個節點每三個月更新一次其憑證。您可以透過執行 docker swarm update --cert-expiry <時間週期> 命令來設定此間隔。最小輪替值為 1 小時。詳細資訊請參閱 docker swarm update CLI 參考。

輪替 CA 憑證

**注意**

Mirantis Kubernetes Engine (MKE),先前稱為 Docker UCP,為 Swarm 提供外部憑證管理服務。如果您在 MKE 上執行 Swarm,則不應手動輪替 CA 憑證。相反地,如果您需要輪替憑證,請聯絡 Mirantis 支援。

如果叢集 CA 金鑰或管理節點遭到入侵,您可以輪替 Swarm 根 CA,這樣所有節點就不再信任由舊根 CA 簽署的憑證。

執行 docker swarm ca --rotate 以產生新的 CA 憑證和金鑰。如果您願意,可以傳遞 --ca-cert--external-ca 旗標來指定根憑證,並使用 Swarm 外部的根 CA。或者,您可以傳遞 --ca-cert--ca-key 旗標來指定您希望 Swarm 使用的確切憑證和金鑰。

當您發出 docker swarm ca --rotate 命令時,會依序發生下列情況

  1. Docker 會產生一個交叉簽署的憑證。這表示新根憑證授權單位 (CA) 憑證的版本會以舊根 CA 憑證簽署。這個交叉簽署的憑證會作為所有新節點憑證的中繼憑證。這可確保仍然信任舊根 CA 的節點仍然可以驗證由新 CA 簽署的憑證。

  2. Docker 也會指示所有節點立即更新其 TLS 憑證。此過程可能需要幾分鐘,視叢集中節點的數量而定。

  3. 叢集中每個節點都有由新 CA 簽署的新 TLS 憑證後,Docker 會忘記舊的 CA 憑證和金鑰資料,並指示所有節點僅信任新的 CA 憑證。

    這也會導致叢集的加入權杖發生變更。先前的加入權杖將不再有效。

從此刻起,所有發出的新節點憑證都會以新的根 CA 簽署,且不包含任何中繼憑證。

深入了解

  • 閱讀關於節點如何運作。
  • 瞭解 Swarm 模式服務如何運作。