平面模式與島嶼模式網路模型

Kubernetes 無法保證叢集外部的任何項目都能與叢集通訊,僅承諾提供下列功能:

  • 叢集中的所有 Pod 都能直接通訊,不必使用網路位址轉譯 (NAT)。即使 Pod 位於不同節點,也能直接相互通訊。

  • 節點上的代理程式 (例如系統精靈或 kubelet) 可以與該節點上的所有 Pod 通訊。

因此,當網路代管兩個叢集時 (如下圖所示),要問的問題是:叢集 1 中的 Pod 如何與叢集 2 中的 Pod 通訊?同樣地,叢集外部的用戶端或伺服器 (在圖中標示為「其他用戶端」和「其他伺服器」),如何與叢集內的 Pod 通訊?

這張圖表顯示網路路徑上的問號,表示 Kubernetes 不保證任何事項

本文說明平面模式網路模型和島嶼模式網路模型如何以不同方式回答這些問題。

扁平模式網路模型

在完全整合或扁平模式的網路中,Pod 在所有叢集都有不重複的 IP 位址。舉例來說,叢集 1 中的 Pod-A 具有 IP 位址,您不會在叢集 1 或叢集 2 的任何其他位置看到這個 IP 位址。同樣地,叢集 2 中的 Pod-G 在兩個叢集之間具有專屬地址。也就是說,叢集 1 的 Pod 可以直接與叢集 2 的任何 Pod 通訊 (假設沒有防火牆或其他政策會封鎖流量)。Pod 對 Pod 通訊不需要閘道或位址轉換。

同樣地,如果網路裝置中靜態設定了轉送,或是節點使用邊界閘道通訊協定 (BGP) 宣告可處理特定 IP 範圍的流量,叢集外部的用戶端和伺服器就能透過 Pod 的專屬 IP 位址,直接與叢集內的 Pod 通訊。

因此,在扁平網路中,通訊簡單又直接:沒有重疊的 IP 位址,也不需要使用疊加網路或 NAT。

圖表:顯示扁平模式網路模型

孤島模式網路模型

如果您有大量 IP 位址空間,且能為每個 Pod 指派專屬 IP 位址,即可選擇平面模式網路模型。不過,如果無法使用大型 IP 位址空間,島嶼模式網路模型是不錯的選擇。

在孤島模式網路中,節點有專屬的 IP 位址,但為了節省稀少的 IP 位址,Pod 在叢集間沒有專屬位址。這不會造成問題,因為一個叢集中的 Pod 絕不會直接與另一個叢集中的 Pod 通訊。如以下圖表所示,兩個叢集中的 Pod 之間會透過閘道進行中介。

圖表:顯示 Island 模式網路模型

同樣地,來自用戶端並進入叢集的 (輸入) 流量,以及離開叢集的 (輸出) 流量,都是由類似的閘道處理。閘道可以透過多種方式實作。例如 NAT、虛擬 IP 位址 (VIP) 和 Proxy 都是閘道。這些服務會執行 IP 位址轉換,達到保護 Pod IP 位址隱私的效果。

在孤島模式網路模型中,每個叢集都可以使用相同的 Pod IP 位址。也就是說,叢集中的 Pod IP 位址可以重複。 如下圖所示,您可以在每個叢集中使用相同的 Pod IP 位址,因為一個叢集中的 Pod 絕不會直接與另一個叢集中的 Pod 通訊。

圖表:顯示 Island 模式網路模型

島嶼模式網路模型的主要優點是,Pod IP 位址可以這種方式重複使用。

這兩種模式的優缺點

以下列出這兩種模型的優缺點:

  • 平面網路比孤島網路更快,因為孤島模式中的閘道會執行位址轉換,而這些轉換會產生效能成本。

  • 在扁平網路中,每個網路項目都有專屬 IP 位址,因此更容易找出問題發生位置,進而簡化叢集問題的偵錯程序。舉例來說,Pod IP 不會遮蓋在節點的 IP 位址後方,因此更容易判斷是哪個 Pod 造成問題。同樣地,在平面模式中,用戶端 IP 不會像在島嶼模式中一樣遭到遮蓋,這也有助於偵錯。

  • 如果 IP 位址不足或 IP 空間分散 (也就是說,您沒有大塊的 IP 位址),可能就無法使用扁平網路模型。在這種情況下,島嶼網路是較好的選擇。

請務必注意,平面和島嶼網路模型只是其中兩種可能的網路模型,即使在這些模型中也有許多變化。