叢集信任

本頁面說明 Google Kubernetes Engine 叢集中的信任,包括主要執行個體和節點如何驗證要求。

叢集內通訊

叢集中有許多用於 Kubernetes 元件之間通訊的連線。

主要執行個體至節點
主要執行個體會為了管理容器而與節點通訊。主要執行個體傳送要求至節點 (如 kubectl logs) 時,系統會透過 SSH 通道傳送該要求,並使用未驗證的 TLS 保護該要求,以確保資料完整性並提供加密。節點傳送要求至主要執行個體時 (例如,由 kubelet 傳送至 API 伺服器),系統會使用雙向 TLS 驗證和加密該要求。
節點對節點
節點可以在特定工作負載中與另一個節點通訊。當節點傳送要求給另一個節點時,該要求會經過驗證,且若該連線跨越 Google 所控管的實體界限,該要求還會經過加密。請注意,沒有任何 Kubernetes 元件需要節點對節點通訊。如要進一步瞭解,請參閱傳輸加密白皮書
Pod 對 Pod
Pod 可以在特定工作負載中與另一個 Pod 通訊。當 Pod 傳送要求給另一個 Pod 時,系統既不會驗證也不會加密該要求。請注意,沒有任何 Kubernetes 元件需要 Pod 對 Pod 通訊。Pod 對 Pod 流量可以透過網路政策加以限制,並且可以使用 Istio 之類的服務網格加密,或以其他方式實作應用程式層加密作業。
etcd 對 etcd
etcd 的執行個體可以與另一個 etcd 的執行個體通訊,以保持更新狀態。當 etcd 的執行個體傳送要求給另一個執行個體時,系統會使用雙向 TLS 驗證並加密該要求。流量絕對不會離開防火牆防護下 GKE 擁有的網路。
主要執行個體對 etcd
此通訊完全透過本機主機進行,不會驗證也不會加密。

信任根

GKE 的設定如下:

  • 叢集根憑證授權單位 (CA) 是用來驗證 API 伺服器和 kubelet 的用戶端憑證。亦即,主要執行個體和節點都擁有相同的信任根。叢集節點集區中的任何 kubelet 都可使用 certificates.k8s.io API 提交憑證簽署要求,向這個 CA 要求憑證。
  • 因叢集而異的獨立 etcd CA 是用於驗證 etcd 的憑證。

API 伺服器和 kubelet

API 伺服器和 kubelet 均採用 Kubernetes 的叢集根 CA 信任機制。在 GKE 中,主要執行個體 API 憑證是由叢集根 CA 簽署。每個叢集會執行各自的 CA,所以,如果某個叢集的 CA 遭駭,其他叢集 CA 不會受到影響。

這個 CA 的根金鑰是由內部 Google 服務管理,且無法匯出。這項服務會接受憑證簽署的要求,包括每個 GKE 叢集中 kubelet 發出的要求。即使叢集中的 API 伺服器遭駭,CA 也不會遭到入侵,所以其他叢集不會受到影響。

叢集中的每個節點在建立時均已注入共用密鑰,可用來向叢集根 CA 提交憑證簽署要求,然後取得 kubelet 用戶端憑證。接著,kubelet 會使用這些憑證驗證其對 API 伺服器的要求。請注意,除非啟用中繼資料隱藏功能,否則 Pod 可以取得這個共用密鑰。

API 伺服器和 kubelet 憑證的效期為五年,但您可以執行憑證輪替,手動提早輪替憑證。

etcd

在 GKE 中,etcd 依賴每個叢集的獨立 etcd CA 取得信任。

etcd CA 的根金鑰會分送到主要執行個體執行的每個 VM 上的中繼資料。在主要 VM 上執行的任何程式碼,或有權計算這些 VM 中繼資料的任何程式碼,均可以這個 CA 的身分簽署憑證。即使叢集中的 etcd 遭駭,但因叢集之間並未共用 CA,所以其他叢集不會受到影響。

etcd 憑證的效期為五年。

輪替憑證

若要輪替所有叢集的 API 伺服器和 kubelet 憑證,請執行憑證輪替。您無法觸發 etcd 憑證輪替;這是 GKE 中的代管工作。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件