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

Docker 內建的 Swarm 模式公開金鑰基礎設施 (PKI) 系統,讓部署安全的容器編排系統變得十分簡單。Swarm 中的節點使用雙向傳輸層安全性協定 (TLS) 來進行驗證、授權,並加密與 Swarm 中其他節點的通訊。

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

管理節點還會產生兩個權杖 (token) 用於加入額外的節點到 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 憑證。根據 Swarm 中的節點數量,此過程可能需要幾分鐘的時間。

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

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

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

了解更多

  • 閱讀關於節點如何運作的內容。
  • 了解 Swarm 模式下的服務如何運作。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.