如要建構可擴充且安全的 Google Kubernetes Engine (GKE) 叢集,您必須有效管理 IP 位址。本文將全面概述 GKE 如何使用 IP 位址進行叢集通訊、支援的網路模型,以及有效管理 IP 位址的最佳做法。
本文適用於為組織設計及建構網路的雲端架構師和網路專家。如要進一步瞭解 Cloud de Confiance by S3NS中的常見角色和工作範例,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
請先確認您熟悉下列概念,再繼續操作:
IP 位址如何連結 GKE 元件
GKE 是以 Kubernetes 網路模型為基礎建構而成,因此每個元件都必須有專屬的 IP 位址才能通訊。以下各節說明 GKE 如何為核心叢集元件指派及使用 IP 位址:
節點:GKE 會從與節點集區相關聯的子網路主要 IP 位址範圍,為每個節點 (即 Compute Engine VM 執行個體) 指派內部 IP 位址。這個 IP 位址可讓節點與 Kubernetes 控制層通訊。節點也可以有外部 IP 位址,用於連出網際網路。
Pod:GKE 遵循 Kubernetes 的「每個 Pod 都有一個 IP 位址」模型,從分配給節點的 Pod CIDR 範圍,為每個 Pod 指派不重複的 IP 位址。在 GKE 中,虛擬私有雲網路會原生轉送 Pod IP 位址。這項內建可路由性功能可讓 Pod 直接通訊,即使跨越不同節點也無須網路位址轉譯 (NAT)。單一 Pod 中的所有容器都共用相同的 IP 位址,並可透過
localhost進行通訊。服務:GKE 會從專屬的次要 IP 位址範圍中,為每個 Kubernetes 服務指派穩定的虛擬 IP 位址 (即
ClusterIP)。這個ClusterIP為一組 Pod 提供單一可靠的端點。將流量傳送至ClusterIP時,GKE 會自動將流量負載平衡至該 Service 內健康狀態良好的 Pod。控制層:在私人叢集中,控制層位於 Google 管理的租戶專案中,並使用自己的內部 IP 位址範圍。這個租戶專案會連線至您的虛擬私有雲網路,在控制層與叢集虛擬私有雲網路中的節點之間,建立安全通訊。這類連線通常會使用 Private Service Connect。
負載平衡器:如要將應用程式公開至網際網路或虛擬私有雲網路,您可以設定 GKE 使用Cloud de Confiance by S3NS 負載平衡器。外部負載平衡器使用公開 IP 位址。內部負載平衡器會使用虛擬私有雲網路主要子網路範圍內的內部 IP 位址。
下表摘要說明 GKE 如何將 IP 位址指派給叢集元件:
| 元件 | IP 位址的指派方式 |
|---|---|
| 節點 | GKE 會為每個節點指派內部 IP 位址。 GKE 會從與節點集區相關聯的子網路主要 IP 位址範圍中,分配這個 IP 位址。這個子網路可以是叢集的預設子網路,也可以是額外子網路。 |
| Pod | GKE 會從指派給節點的 Pod CIDR 範圍,為每個 Pod 指派不重複的 IP 位址。 |
| Service (ClusterIP) | GKE 會從叢集虛擬私有雲網路中的專用次要 IP 位址範圍,為每項 Service 指派穩定的虛擬 IP 位址 (ClusterIP)。 |
| 控制層 | 在私人叢集中,GKE 控制層在 Google 管理的租戶專案中,有自己的內部 IP 位址範圍。這個租戶專案會連線至您的虛擬私有雲網路,通常是透過 Private Service Connect。 |
| 負載平衡器 | 外部負載平衡器使用公開 IP 位址。內部負載平衡器會使用叢集子網路主要 IP 位址範圍中的內部 IP 位址。 |
Kubernetes IP 位址和 GKE 實作
如要有效使用 GKE,您必須瞭解抽象 Kubernetes 網路模型,以及 GKE 如何在 Cloud de Confiance by S3NS上實作這個模型。
Kubernetes IP 定址模型:開放原始碼 Kubernetes 專案會指定每個 Pod 接收不重複的 IP 位址。所有 Pod IP 位址都可以直接通訊,不必進行網路位址轉譯 (NAT)。這種做法可確保網路空間平坦,Pod 可以使用指派的 IP 位址彼此連線。
GKE IP 位址實作:GKE 會整合虛擬私有雲原生網路,在 Cloud de Confiance by S3NS 上實作 Kubernetes IP 位址模型。建立 Pod 時,GKE 會從虛擬私有雲別名 IP 位址範圍分配 IP 位址。這可讓每個 Pod 的 IP 位址在整個虛擬私有雲網路中,以原生方式進行路由。這樣一來,Pod 之間不僅能直接通訊,還能與其他 Cloud de Confiance by S3NS 資源 (例如 Compute Engine 執行個體和 Cloud SQL 資料庫) 直接通訊。同樣地,GKE 會管理虛擬私有雲網路中的 Kubernetes
ServiceIP 位址 (例如ClusterIP)。建立要對外公開的LoadBalancerService 時,GKE 會佈建Cloud de Confiance by S3NS 負載平衡器。這些負載平衡器會使用虛擬私有雲網路的公開或內部 IP 位址。GKE 使用 Cloud de Confiance by S3NS強大的 IP 定址和網路基礎架構,以可擴充且安全的方式實作 Kubernetes IP 網路概念。
GKE 網路模型:VPC 原生叢集
GKE 會使用 VPC 原生網路實作 Kubernetes 網路模型,這是核心 Cloud de Confiance by S3NS 功能。
這個模型使用別名 IP 位址範圍。在 VPC 原生叢集中,Kubernetes 會將 Pod IP 位址設為節點虛擬網路介面上的別名 IP 位址範圍。
這種做法有幾項主要優點:
- 虛擬私有雲原生可轉送性:Pod IP 位址可直接在虛擬私有雲網路中轉送。這項功能可簡化網路設計,並在 Pod 和其他 Cloud de Confiance by S3NS 資源 (例如 Compute Engine 執行個體和 Cloud SQL 執行個體) 之間,建立直接且低延遲的通訊。
- 節省路徑配額:使用 Pod 的別名 IP 位址時,GKE 不會為每個節點建立自訂靜態路徑。這項功能可節省 VPC 路由配額,相較於舊版使用路由的叢集,這是一大進步,對於大規模部署作業而言非常重要。
- 強化安全性:虛擬私有雲原生路由功能可讓您直接對 Pod 流量套用虛擬私有雲原生防火牆規則,強化網路層級的安全性。
VPC 原生是所有 GKE 叢集的預設網路模式,也是建議使用的模式。
有效管理 IP 位址的重要性
為確保叢集能擴充並維持應用程式健康狀態,您必須有效規劃 IP 位址空間:
- 確保可擴充性:有效規劃節點、Pod 和 Service 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 和 Service 指派 IPv4 和 IPv6 位址。這個模型適合:
- 逐步轉換至 IPv6。
- 確保與支援 IPv6 的工作負載,以及現有的僅支援 IPv4 的用戶端和服務相容。
建立叢集時可以啟用雙堆疊網路,也可以將現有的單堆疊叢集更新為雙堆疊。
後續步驟
- 如要進一步瞭解 GKE 預設網路模式的優點,請參閱「關於 VPC 原生叢集」。
- 首先,請瞭解如何建立 VPC 原生叢集。
- 如需叢集 IP 位址範圍大小的相關指引,請參閱「虛擬私有雲原生叢集的 IP 位址範圍規劃」。
- 如需常見問題的說明,請參閱「排解 IP 偽裝代理程式問題」。