建立叢集網路政策

本頁面說明如何在 Google Kubernetes Engine 中設定網路政策。如需 GKE 網路的一般資訊,請造訪網路總覽頁面。

總覽

您可以使用 GKE 的「強制執行網路政策」來控制叢集的 Pod 和服務之間的通訊。若要在 GKE 上定義網路政策,您可以使用 Kubernetes Network Policy API 來建立 Pod 層級的防火牆規則。這些防火牆規則會判斷哪些 Pod 和服務可以在叢集內互相存取。

定義網路政策可以協助您啟用多種功能,例如當叢集提供多層級應用程式時的深入防禦機制。例如,您可以建立網路政策,確保應用程式中遭駭的前端服務不會直接與往下好幾層的計費或會計服務直接通訊。

網路政策也讓應用程式能更簡單地同時託管來自多個使用者的資料。例如,您可以為每個命名空間定義一個租戶模型,提供安全的多租戶架構。在這樣的模型中,網路政策規則可確保特定命名空間中的 Pod 和服務無法存取不同命名空間中其他的 Pod 和服務。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

使用強制執行網路政策

若要啟用或停用強制執行網路政策,您可以使用 gcloud 指令列工具、GKE REST API 或Google Cloud Platform 主控台。

在叢集中啟用網路政策後,您便可使用 Kubernetes Network Policy API 來建立網路政策。

建立 GKE 叢集或啟用現有叢集時,可以啟用強制執行網路政策。您也可以停用現有叢集的網路政策。

啟用強制執行網路政策

gcloud

若要在使用 gcloud 指令列工具「建立新叢集時」啟用強制執行網路政策,請執行 gcloud container clusters create 指令搭配 --enable-network-policy 標記:

gcloud container clusters create [CLUSTER_NAME] --enable-network-policy

使用 gcloud 指令列工具啟用「現有叢集」的強制執行網路政策程序包含兩個步驟。首先,執行 gcloud container clusters update 指令搭配 --update-addons 標記。

gcloud container clusters update [CLUSTER_NAME] --update-addons=NetworkPolicy=ENABLED

接著,執行 gcloud container clusters update 指令搭配 --enable-network-policy 標記。此指令會重新建立啟用網路政策的叢集節點集區:

gcloud container clusters update [CLUSTER_NAME] --enable-network-policy

主控台

若要「在建立新叢集時」啟用強制執行網路政策,請執行以下步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下 [Create cluster] (建立叢集)。

  3. 視需要設定您的叢集。

  4. 按一下 [Advanced options] (進階選項)。在「Networking」(網路) 區段中,選擇 [Enable network policy] (啟用網路政策)

  5. 按一下 [Create] (建立)。

若要「為現有叢集」啟用強制執行網路政策,請執行以下步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下要強制執行網路政策的叢集。

  3. 按一下鉛筆圖示旁的 [Edit] (編輯)

  4. 從 [Network policy for master] (主要執行個體網路政策) 下拉式選單中,選擇 [Enabled] (已啟用)

  5. 按一下 [Save] (保存),然後在更新叢集後再按一下 [Edit] (編輯)

  6. 從 [Network policy for nodes] (節點的網路政策)下拉式選單中,選擇 [Enabled] (已啟用)

  7. 按一下 [Save] (儲存)

API

若要使用 GKE API 啟用網路政策,請指定提供給 projects.zones.clusters.updateprojects.zones.clusters.updatecluster 物件內的 networkPolicy 物件。

networkPolicy 物件需要一個 enum 來指定要使用的網路政策提供者,以及一個布林值來指定是否要啟用網路政策。若啟用網路政策,但並未設定提供者,createupdate 指令會傳回錯誤。目前,唯一有效的提供者值為 CALICO

停用強制執行網路政策

gcloud

若要使用 gcloud 指令列工具,停用現有叢集的強制執行網路政策,請執行 gcloud container clusters update 指令搭配 --no-enable-network-policy 標記。

gcloud container clusters update [CLUSTER_NAME] --no-enable-network-policy

主控台

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下叢集的 [編輯] 按鈕 (看起來像枝鉛筆)。

  3. 從 [Network policy for nodes] (節點的網路政策)下拉式選單中,選擇 [Disabled] (已停用)

  4. 按一下 [Save] (儲存)。然後,再按一下 [Edit] (編輯)

  5. 從 [Network policy for master] (主要執行個體網路政策) 下拉式選單中,選擇 [Disabled] (停用)

  6. 按一下 [Save] (儲存)

API

若要使用 GKE API 停用現有叢集的強制執行網路政策,請指定提供給 projects.zones.clusters.update,位於 cluster 物件內的 networkPolicy 物件。在 networkPolicy 物件內,將布林 enabled 值設成 false

建立網路政策

一旦啟用叢集的強制執行網路政策,就必須定義實際的網路政策。請使用 Kubernetes Network Policy API 來定義網路政策。

如需深入瞭解如何建立網路政策,請參閱 Kubernetes 說明文件中的下列主題:

使用 PodSecurityPolicy

如果您使用的是 NetworkPolicy,且您有須遵守 PodSecurityPolicy 的 Pod,請建立一個有權限使用 PodSecurityPolicy 的 RBAC 角色或 ClusterRole。然後將角色或 ClusterRole 與 pod 的服務帳戶互相繫結。在這種情況下,授予權限給使用者帳戶的條件仍不足夠。詳情請參閱授權政策

暫時覆寫網路政策

在有問題或有意外狀況發生時,可在叢集上暫時停用強制執行網路政策。詳情請參閱 Tigera 說明文件有關覆寫 Calico 政策的章節。

負擔、限制和注意事項

  • 啟用強制執行網路政策會消耗節點中的額外資源。具體而言,這項設定會增加「kube-system」程序的記憶體佔用空間大約 128 MB,而需要大約 300 millicore 的 CPU。
  • 啟用強制執行網路政策需要重新建立節點。若叢集有作用中的維護期間,系統會在下次的維護期間自動重新建立節點。或者您也可以隨時手動升級叢集

限制與需求

  • 您的叢集必須具備 2 個以上 n1-standard-1 類型的節點。我們「建議」用於強制執行網路政策的最小叢集大小為 3 個 n1-standard-1 執行個體。
  • 針對叢集上節點為 f1-microg1-small 的執行個體,我們不支援網路政策,因為對這個大小的執行個體來說,資源的需求太高。

如要進一步瞭解節點機器類型和可分配的資源,請參閱叢集架構 - 節點

使用 HTTP(S) 負載平衡器執行健康狀態檢查

當 Ingress 套用於服務以建構 HTTP(S) 負載平衡器時,則套用於該服務後面的 Pod 網路政策,也必須允許適當的 HTTP(S) 負載平衡器探測 IP 範圍

此外,除非透過在服務定義中將 externalTrafficPolicy 設定為「本機」,否則服務的節點通訊埠可以轉接到其他節點上的 Pod 連線。如果 externalTrafficPolicy 未設定為 Local,則網路策略也必須允許來自叢集中其他節點 IP 的連線。

請注意,本討論並不適用於在具有網路端點的群組使用容器原生負載平衡

後續步驟

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

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

這個網頁
Kubernetes Engine 說明文件