平面和孤島模式網路模型

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 位址),可能就無法使用扁平網路模型。在這種情況下,島嶼網路是較好的選擇。

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