根據預設,Google Kubernetes Engine (GKE) 節點會使用每個節點上的 kubelet 程序,向 Kubernetes API 伺服器註冊 Node 物件。本文說明如何防止受防護的 GKE 節點自行註冊,改為要求受信任的 GKE 控制平面元件執行註冊作業。安全工程師和平台管理員可以使用控制層節點建立作業,限制節點的權限。
您應該已熟悉下列概念:
GKE 中的節點建立模式
所有 GKE 叢集都會啟用 Shielded GKE 節點,在節點註冊程序中強制執行節點身分的加密驗證。這項驗證可確保只有合法的節點能向 Kubernetes API 伺服器註冊及執行工作負載。
GKE 叢集的預設註冊工作流程中,每個節點上的 kubelet 會在 API 伺服器中建立及修改 Node 物件,如果節點遭到入侵,就會造成風險。舉例來說,在 CVE-2025-5187 中,節點使用者可透過安全漏洞刪除對應的 Node 物件,並註冊遭入侵的節點。
建立控制層節點
在 GKE 1.35.3-gke.1189000 以上版本中,您可以選擇要求名為 gcp-controller-manager 的受信任 GKE 控制層元件建立 Node 物件,而不是允許 kubelet 自行註冊節點。kubelet 使用經過密碼編譯驗證的節點身分與 API 伺服器建立 TLS 連線後,gcp-controller-manager 元件會建立 Node 物件。准入控制器會拒絕 kubelet 的任何要求,以建立 Node 物件。使用控制層元件建立 Node 物件,可降低節點遭入侵的風險,避免節點建立任意 Node 物件或操控 Node 規格。
如要變更預設的節點建立和註冊行為,請在建立 Standard 或 Autopilot 叢集時,執行下列其中一項操作:
- Google Cloud CLI:在
--node-creation-mode旗標中指定CONTROL_PLANE值。 - Kubernetes Engine API:在
NodeCreationConfig方法的node-creation-mode欄位中指定VIA_CONTROL_PLANE值。
限制
gcp-controller-manager 在 Kubernetes API 中建立 Node 物件後,kubelet 會稍待片刻,再以完整的節點標籤和註解更新該 Node 物件。如果任何工作負載或控制器在節點建立後,立即需要一整組標籤或註解,可能會出現非預期的行為。某些標籤和註解的對帳時間可能與kubelet註冊時間不同。確認工作負載和 DaemonSet 會先檢查標籤和註解是否存在,再採取行動。
- 請避免部署 DaemonSet 和工作負載,這些項目會容許所有節點 taint,這可能會導致 Pod 在未準備就緒的節點上執行。
- 在主要容器執行前,請先使用
initContainer檢查節點標籤。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
啟用控制層節點建立作業
建立叢集或更新現有叢集時,您可以使用 gcp-controller-manager 元件啟用節點建立作業。如果是現有叢集,更新只會影響叢集中的新節點。現有節點不受這項異動影響。
下列指令會為現有叢集啟用控制層節點建立模式:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=CONTROL_PLANE \
--location=CONTROL_PLANE_LOCATION \
更改下列內容:
CLUSTER_NAME:叢集名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區。
您也可以在 clusters create 指令和 clusters create-auto 指令中指定 --node-creation-mode 旗標。
停用控制層節點建立作業
您可以指定 --node-creation-mode Google Cloud CLI 旗標中的 KUBELET 值,或 NodeCreationConfig GKE API 方法中的 VIA_KUBELET 值,還原為預設 GKE 行為,讓 kubelet 隨時建立節點。如果是現有叢集,這項變更只會影響該叢集中的新節點。
下列指令會更新叢集,停用控制層節點建立作業:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
更改下列內容:
CLUSTER_NAME:叢集名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區。
後續步驟
- 進一步瞭解受防護的 GKE 節點。
- 閱讀 GKE 安全性總覽。
- 瞭解如何強化叢集安全性。