瞭解 GKE 中的 IP 位址

如要建構可擴充且安全的 Google Kubernetes Engine (GKE) 叢集,您必須有效管理 IP 位址。本文將全面介紹 GKE 如何使用 IP 位址進行叢集通訊、支援的網路模型,以及有效管理 IP 位址的最佳做法。

本文適用於負責設計及建構機構網路的雲端架構師和網路專家。如要進一步瞭解 Google Cloud中的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

請務必先熟悉下列概念,再繼續操作:

IP 位址如何連結 GKE 元件

GKE 是以 Kubernetes 網路模型為基礎建構而成,因此每個元件都必須有專屬的 IP 位址才能進行通訊。以下各節說明 GKE 如何為核心叢集元件指派及使用 IP 位址:

  • 節點:GKE 會為每個節點 (即 Compute Engine VM 執行個體) 指派內部 IP 位址,該位址來自與節點集區相關聯的子網路主要 IP 位址範圍。這個 IP 位址可讓節點與 Kubernetes 控制層通訊。節點也可以有外部 IP 位址,以便連出網際網路。

  • Pod:根據 Kubernetes「每個 Pod 一個 IP」模型,GKE 會從指派給節點的 Pod CIDR 範圍,為每個 Pod 指派不重複的 IP 位址。在 GKE 中,虛擬私有雲網路會原生轉送 Pod IP 位址。這項內建可路由性功能可讓 Pod 直接通訊,即使是跨節點也無須網路位址轉譯 (NAT)。單一 Pod 中的所有容器共用相同的 IP 位址,且可透過 localhost 通訊。

  • 服務:GKE 會從專屬的次要 IP 位址範圍,為每個 Kubernetes 服務指派穩定的虛擬 IP 位址 (ClusterIP)。這項 ClusterIP 可為一組 Pod 提供單一可靠的端點。當您將流量傳送至 ClusterIP 時,GKE 會自動將流量以負載平衡的方式轉送至該服務中健康狀態良好的 Pod。

  • 控制層:在私人叢集中,控制層位於 Google 管理的租戶專案中,並使用自己的內部 IP 位址範圍。這個租戶專案會連線至您的 VPC 網路,讓控制平面與叢集 VPC 網路中的節點安全通訊。這個連線通常會使用 Private Service Connect。

  • 負載平衡器:如要向網際網路或虛擬私有雲網路公開應用程式,您可以設定 GKE 使用Google Cloud 負載平衡器。外部負載平衡器使用公開 IP 位址。內部負載平衡器會使用虛擬私有雲網路主要子網路範圍內的內部 IP 位址。

下表摘要說明 GKE 如何將 IP 位址指派給叢集元件:

元件 IP 位址的指派方式
節點 GKE 會為每個節點指派內部 IP 位址。GKE 會從與節點集區相關聯的子網路主要 IP 位址範圍,分配這個 IP 位址。這個子網路可以是叢集的預設子網路,也可以是額外子網路。
Pod GKE 會從指派給節點的 Pod CIDR 範圍,為每個 Pod 指派不重複的 IP 位址。
服務 (ClusterIP) GKE 會從叢集 VPC 網路內的專屬次要 IP 位址範圍,為每個 Service 指派一個穩定的虛擬 IP 位址 (ClusterIP)。
控制層 在私人叢集中,GKE 控制層在 Google 管理的租戶專案中,有自己的內部 IP 位址範圍。這個租戶專案會連線至您的虛擬私有雲網路,通常是透過 Private Service Connect。
負載平衡器 外部負載平衡器使用公開 IP 位址。內部負載平衡器會使用叢集子網路主要 IP 位址範圍內的內部 IP 位址。

Kubernetes IP 位址和 GKE 實作

如要有效使用 GKE,您必須瞭解抽象 Kubernetes 網路模型,以及 GKE 如何在 Google Cloud上實作這個模型。

  • Kubernetes IP 位址模型:開放原始碼 Kubernetes 專案規定每個 Pod 都要收到不重複的 IP 位址。所有 Pod IP 位址都可以直接通訊,無需網路位址轉譯 (NAT)。這可確保 Pod 能夠使用指派的 IP 位址,在扁平網路空間中相互連線。

  • GKE IP 位址實作:GKE 會整合 VPC 原生網路,在 Google Cloud 上實作 Kubernetes IP 位址模型。建立 Pod 時,GKE 會從 VPC 別名 IP 位址範圍分配 IP 位址。這樣一來,每個 Pod 的 IP 位址就能在整個 VPC 網路中原生路由。這不僅能讓 Pod 之間直接通訊,也能與其他 Google Cloud 資源通訊,例如 Compute Engine 執行個體和 Cloud SQL 資料庫。同樣地,GKE 會管理虛擬私有雲網路中的 Kubernetes Service IP 位址 (例如 ClusterIP)。為公開服務建立 LoadBalancer 服務時,GKE 會佈建Google Cloud 負載平衡器。這些負載平衡器會使用虛擬私有雲網路的公開或內部 IP 位址。GKE 會使用強大的 IP 位址和網路基礎架構,以可擴充且安全的方式實作 Kubernetes 的 IP 型網路概念。 Google Cloud

GKE 網路模型:虛擬私有雲原生叢集

GKE 會使用 VPC 原生網路實作 Kubernetes 網路模型,這是核心 Google Cloud 功能。

這個模型使用別名 IP 位址範圍。在虛擬私有雲原生叢集中,Kubernetes 會將 Pod IP 位址設定為節點虛擬網路介面上的別名 IP 位址範圍。

這項實作方式有幾項主要優點:

  • 虛擬私有雲原生可路由性:Pod IP 位址可在虛擬私有雲網路中直接路由。這可簡化網路設計,並讓 Pod 與其他 Google Cloud 資源 (例如 Compute Engine 執行個體和 Cloud SQL 執行個體) 之間直接通訊,減少延遲。
  • 節省路徑配額:使用 Pod 的別名 IP 位址時,GKE 不會為每個節點建立自訂靜態路徑。這項功能可節省虛擬私有雲路徑配額,相較於舊版路徑導向叢集,這是一大進步,對於大規模部署作業而言非常重要。
  • 提升安全性:透過虛擬私有雲原生可路由性,您可以直接對 Pod 流量套用虛擬私有雲原生防火牆規則,提升網路層級的安全性。

虛擬私有雲原生是所有 GKE 叢集的預設網路模式,建議您使用此模式。

有效管理 IP 位址的重要性

為確保叢集可以擴充及維持應用程式健康狀態,您必須有效規劃 IP 位址空間:

  • 確保擴充性:有效規劃節點、Pod 和服務 IP 位址範圍,避免 IP 位址耗盡,並允許叢集擴充,不必進行破壞性網路重新架構。
  • 確保可靠性:避免 GKE 叢集和其他網路 (例如透過 Cloud VPN 連線的地端環境) 之間出現 IP 位址範圍重疊的情況。範圍重疊可能會導致路由衝突、無法預測的行為和服務中斷。
  • 強化安全性:有效管理 IP 位址,強化網路安全。定義 Kubernetes 網路政策,控管 Pod 之間的流量,並在網路層級設定防火牆規則,隔離工作負載。

為叢集選擇 IP 位址模型

GKE 支援多種網路堆疊設定,可滿足您的網路需求,包括僅限 IPv4、雙重堆疊 (IPv4 和 IPv6),以及即將推出的僅限 IPv6 選項。

僅限 IPv4 (單一堆疊)

這是最常見的標準設定,所有叢集元件都會使用 IPv4 位址。即使是僅限 IPv4 的模型,GKE 仍提供彈性:

  • RFC 1918 私人 IP 位址:為叢集使用 RFC 1918 私人 IP 位址範圍 (例如 10.0.0.0/8)。
  • 私用公開 IP 位址 (PUPI):如果貴機構的私有 IP 位址空間不足,您可以在虛擬私有雲網路內使用公開 IP 位址範圍。使用 PUPI 時,您必須設定 IP 偽裝代理程式。這個代理程式會對 Pod 的輸出流量執行來源網路位址轉譯 (SNAT)。如果沒有 SNAT,傳回使用 PUPI 的 Pod 的流量會透過公開網際網路轉送,並失敗。IP 偽裝代理程式會將輸出封包的來源 IP 位址從 Pod 的 PUPI 變更為節點的內部 IP 位址,以防止發生這種情況。這可確保回程流量正確地路由回節點,然後轉送至原始 Pod。

雙重堆疊 (IPv4 和 IPv6)

雙重堆疊叢集會同時使用 IPv4 和 IPv6 通訊協定。在雙重堆疊叢集中,GKE 會為節點、Pod 和服務指派 IPv4 和 IPv6 位址。這個模型非常適合:

  • 協助逐步轉換至 IPv6。
  • 確保與支援 IPv6 的工作負載,以及現有的僅限 IPv4 的用戶端和服務相容。

您可以在建立叢集時啟用雙重堆疊網路,也可以將現有的單一堆疊叢集更新為雙重堆疊。

後續步驟