使用公鑰基礎設施 (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) 下的角色。對於該節點在當前 Swarm 中的生命週期而言,節點 ID 作為其加密安全的節點身份。

下圖說明了管理節點和工作節點如何使用最低 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 <TIME PERIOD> 命令來配置此間隔。最小輪換值為 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 證書。此過程可能需要幾分鐘,具體取決於 Swarm 中節點的數量。

  3. 在 Swarm 中的每個節點都有了由新 CA 簽名的新 TLS 證書後,Docker 會忘記舊的 CA 證書和金鑰材料,並告訴所有節點只信任新的 CA 證書。

    這也會導致 Swarm 的加入令牌發生變化。之前的加入令牌不再有效。

從此時起,所有新頒發的節點證書都將由新的根 CA 簽名,並且不包含任何中間證書。

瞭解更多

  • 閱讀有關節點工作原理的資訊。
  • 瞭解 Swarm 模式服務的工作原理。