如要建構可擴充且安全的 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
ServiceIP 位址 (例如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 的用戶端和服務相容。
您可以在建立叢集時啟用雙重堆疊網路,也可以將現有的單一堆疊叢集更新為雙重堆疊。
後續步驟
- 如要進一步瞭解 GKE 預設網路模式的優點,請參閱「關於虛擬私有雲原生叢集」。
- 如要開始使用,請瞭解如何建立虛擬私有雲原生叢集。
- 如需調整叢集 IP 位址範圍大小的相關說明,請參閱虛擬私有雲原生叢集的 IP 位址範圍規劃。
- 如需解決常見問題的說明,請參閱「排解 IP 偽裝代理程式問題」。