本頁面說明 Google Kubernetes Engine (GKE) 叢集中的信任模型,包括叢集內的通訊,以及如何驗證控制層等元件的要求。
本文適用於想瞭解 GKE 叢集信任模型的安全專家。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作。
閱讀本頁面之前,請先熟悉下列概念:
叢集內通訊
GKE 會對叢集元件之間的流量套用各種安全機制,如下所示:
控制層與節點之間的流量:控制層會與節點通訊,以管理容器。控制平面傳送要求 (例如
kubectl logs
) 至節點時,要求會透過 Konnectivity Proxy 通道傳送。控制層傳送的要求會經過驗證,並受到 TLS 保護。節點傳送要求至控制平面時 (例如,由 kubelet 傳送至 API 伺服器),系統會使用雙向傳輸層安全標準 (TLS) 驗證和加密該要求。所有新建立及更新的叢集,都會使用 TLS 1.3 進行控制層與節點之間的通訊。控制層與節點通訊時,支援的最低 TLS 版本為 1.2。
節點間的流量:節點是 Compute Engine VM。 Google Cloud 實際工作環境網路中節點之間的連線會經過驗證和加密。詳情請參閱傳輸加密白皮書的「VM-to-VM」一節。
Pod 之間的流量:當 Pod 傳送要求給另一個 Pod 時,系統預設不會驗證該流量。GKE 會在網路層加密不同節點上 Pod 之間的流量。預設情況下,相同節點上 Pod 之間的流量不會加密。如要進一步瞭解網路層加密,請參閱Google Cloud 虛擬網路加密和驗證。
您可以使用NetworkPolicy限制 Pod 對 Pod 流量,並使用 Cloud Service Mesh 等服務網格,或以其他應用程式層加密方法,加密所有 Pod 對 Pod 流量,包括同一節點上的流量。
控制層元件之間的流量:控制層上執行的各種元件之間的流量,會使用 TLS 進行驗證和加密。流量絕不會離開防火牆防護下 Google 擁有的網路。
信任根
GKE 的設定如下:
- 叢集根憑證授權單位 (CA) 是用來驗證 API 伺服器和 kubelet 的用戶端憑證。也就是說,控制層和節點都擁有相同的信任根。叢集節點集區中的任何 kubelet 都可使用
certificates.k8s.io
API 提交憑證簽署要求,向這個 CA 要求憑證。如「叢集根 CA 生命週期」一節所述,根 CA 的生命週期有限。 - 在控制層 VM 上執行 etcd 資料庫執行個體的叢集中,每個叢集會使用獨立的 etcd 對等互連 CA,在 etcd 執行個體之間建立信任關係。
- 在所有 GKE 叢集中,系統會使用獨立的 etcd API CA,在 Kubernetes API 伺服器和 etcd API 之間建立信任關係。
API 伺服器和 kubelet
API 伺服器和 kubelet 均依賴叢集根 CA 取得信任。在 GKE 中,控制層 API 憑證是由叢集根 CA 簽署。每個叢集會執行各自的 CA,正因如此,就算有某個叢集的 CA 遭駭,其他叢集的 CA 也不會受到影響。
這個 CA 的根金鑰是由內部服務管理,且無法匯出。 這項服務會接受憑證簽署的要求,包括每個 GKE 叢集中 kubelet 發出的要求。即使叢集中的 API 伺服器遭駭,CA 也不會遭到入侵,所以其他叢集不會受到影響。
叢集中的每個節點在建立時均已注入共用密鑰,可用來向叢集根 CA 提交憑證簽署要求,然後取得 kubelet 用戶端憑證。接著,kubelet 會使用這些憑證驗證其對 API 伺服器的要求。除非啟用受防護的 GKE 節點或 Workload Identity Federation for GKE,否則節點上的 Pod 可以取得這個共用密鑰。
叢集根 CA 生命週期
叢集根 CA 的生命週期有限,過期後,由該 CA 簽署的任何憑證都會失效。按照「檢查憑證生命週期」一文中的操作說明,查看叢集 CA 的概略到期日。
您應在現有根 CA 到期前手動輪替憑證。如果 CA 過期,且您未輪替憑證,叢集可能會進入無法復原的狀態。GKE 具有下列機制,可盡量避免叢集無法復原:
- 叢集會在 CA 憑證到期前七天進入
DEGRADED
狀態 GKE 會在 CA 到期前 30 天嘗試自動輪替憑證。這項自動輪替作業會忽略維護時間範圍,而且 GKE 會重建節點來使用新憑證,因此可能會造成服務中斷。您必須更新外部用戶端 (例如本機環境中的 kubectl),才能使用新憑證。
如要瞭解如何執行輪替作業,請參閱「輪替叢集憑證」。
叢集狀態儲存空間
GKE 叢集會將 Kubernetes API 物件的狀態儲存為資料庫中的鍵/值組合。控制層中的 Kubernetes API 伺服器會使用 etcd API 與這個資料庫互動。GKE 會使用下列其中一種技術執行叢集狀態資料庫:
- etcd:叢集會使用在控制層 VM 上執行的 etcd 執行個體。
- Spanner:叢集使用在控制平面 VM 外部執行的 Spanner 資料庫。
無論叢集使用哪種資料庫技術,每個 GKE 叢集都會在控制層中提供 etcd API。如要加密涉及叢集狀態資料庫的流量,GKE 會使用下列一或多個叢集專屬 CA:
- etcd API CA:用於簽署往返 etcd API 端點的流量憑證。每個 GKE 叢集都會執行 etcd API CA。
- etcd 對等互連 CA:用於簽署控制層上 etcd 資料庫執行個體之間的流量憑證。使用 etcd 資料庫的任何叢集都會執行 etcd 對等互連 CA。使用 Spanner 資料庫的叢集不會使用 etcd 對等互連 CA。
etcd API CA 的根金鑰會分送到控制層執行的每個 Compute Engine 執行個體的中繼資料。叢集之間不會共用 etcd API CA。
etcd CA 憑證的效期為五年。GKE 會在這些憑證到期前自動輪替。
憑證輪替
若要輪替所有叢集的 API 伺服器和 kubelet 憑證,請執行憑證輪替。您無法觸發 etcd 憑證輪替;這是 GKE 中的代管工作。