NSX Routing(OSPF, IS-IS, BGP)
NSX Routing (在 vCloud 環境的話則是使用 vShield Edge)。首先,了解 OSPF (Open Shortest Path First)、IS-IS (Intermediate System to Intermediate System)、BGP (Border Gateway Protocol) 等動態路由的運作流程。簡單來說 OSPF 常用於「內部路由」的部份,而 IS-IS 則是決定「最佳路由」的部份,而 BGP 則是「外部路由」的部份。
OSPF Packet 的 Header 為 24 bytes,包含 OSPF 版本、RID(Router ID)、Area ID…etc。預設的 OSPF Area Type 大致三大類 Normal Area, Stub Area, NSSA(Not so Stubby Area),每個 Area 自行維護 Link-State Database。
由 NSX Controller 集中「部署、管理」Logical Router,每台 Distributed Logical Router 可以有 1000 Interface,NSX 架構中最多可以有 1200 台 Distributed Logical Router,每台 ESXi Host 最多 100 台 Distributed Logical Router。
以往當 VM 虛擬主機在不同的二台 ESXi 主機要互相溝通時,網路流量一定會流出 Layer2 實體層,這種非最佳流量的傳送行為稱之為「Hairpinning」。
現在,在 NSX 網路虛擬化環境中,當處於不同 VXLAN 的 VM 虛擬主機要互相溝通時,透過 NSX Edge Gateway 轉介,在 Layer3 就處理好整個傳輸流程如下:
1. 雖然二台 VM 虛擬主機身處於同一台 ESXi 主機,但是卻處於不同的 VXLAN 5001/5002。
2. VXLAN 5001 中的 VM 發送 Frame 到 Logical Switch 至 vDS,因為 VM 處於不同 VXLAN 所以 ESXi 將 Frame 轉送到 Default Gateway (也就是 NSX Edge Gateway)。
3. 運作 NSX Edge Gateway 的 ESXi 主機,收到遠端 ESXi 主機傳來的 Frame。
4. 運作 NSX Edge Gateway 的 ESXi 主機,將收到的 Frame 傳給其上運作的 NSX Edge Gateway。
5. NSX Edge Gateway 確認路由路徑後,發回應 Packet 給剛才遠端的 ESXi 主機,一樣到 vDS 然後到 VXLAN 5002 的 Logical Switch。
6. 確認後,傳送 Frame 給 VXLAN 5002 的 VM。
7. VXLAN 5001 的 VM 順利與 VXLAN 5002 的 VM 進行溝通。
如同上述範例所說的溝通情境,當二台 VM 虛擬主機在同一台 ESXi 主機,但是卻身處於不同 VXLAN 時,流量到了 ESXi VMkernel 層 (Data Plane) 之後,就可以直接路由流量了(記憶體網路流量),而不必出去問 NSX Edge Gateway 再回來。
由 NSX Controller Cluster 當中的三台來負責分發,LR Control VM 所學習到的路由 (跨 ESXi 主機) 給 Distributed Logical Router。
Distributed Logical Router 擁有 LIFs (Logical Interfaces),你可以想成是實體 Router 的網路介面,它包含了 IP Address、ARP Table,且每台 Distributed Logical Router 可以配置多個 LIFs (最多 1000),分別連接到 Logical Switch 或 vDS Port Group。
在 LIF 當中的 MAC Address 稱為 vMAC(virtual MAC),所有的 VM vMAC 不會儲存到 Layer2 Switch 當中,因為這些 vMAC 是在 VXLAN 當中的,因此實體網路其實看不到 VM,且 VM 會以 vMAC 當成 Default Gateway 的 MAC Address。而 pMAC(physical MAC) 則是對應到 uplink,用來處理 VLAN LIF 以連接到實體網路。
每個 VLAN LIF 中存在一個 Designated Instance,負責解析 ARP 並回應給主機,當 ARP Request 封包送到 vDS Port Group 時,就是由 Designated Instance 負責。NSX Controller會在所有主機中選舉,然後推送 Designated Instance 給勝出的那台主機,當發生故障事件時,NSX Controller 會在存活的主機中再次選舉,然後更新資訊給其它存活主機知悉。
Logical Router Control VM (其實就是 vShield Edge),也是從 NSX Manager 挖 Logical Router Control VM 的 OVA 出來部署,它的 HA 機制是採用 AutoStart Manager 來處理,會再長一台 VM 出來,共二台來達成 Active-Standby,同時在 Firewall 內會多規則 169.254.1.1/30、169.254.1.2/30 來進行 Heartbeat 行為。值得注意的部份是,當啟用/關閉 HA 機制,會暫時無法運作!!
所以 Management, Control, Data Plane,這三個層級之間的網路流量到底是如何進行傳送? 詳見下圖
了解後,我們來看看一些典型部署模型。首先,是比較簡單的「One-Tier」架構。
接著來看看比較複雜的架構「Two-Tier」。
現在,有了 Distributed Router 之後,當 VM 虛擬主機需要互相溝通時,在同一台 ESXi Host 網路流量的流向。簡單來說,當 ARP 封包到 Distributed Router 後,因為在同一台便直接查到 ARP Table,所以直接回覆網路流量並進行後續溝通 (記憶體流量)。
即使二台 VM 位於不同台 ESXi Host,流量也不會跑到實體 Layer2 層,而是在 VXLAN Transport Network 層就處理好。
簡單來說,很重要的原則是,只要是可以在虛擬環境交換的流量都會使用 VXLAN,只有需要到實體網路時才會採用 VLAN 流量。此外,Layer 2 Bridging 的 Data path 完全在 VMkernel 進行交換,在 vDS 的 dvPort Type 中稱為 Sink Port,以進行引導封包的橋樑。請注意!! Distributed Routing 及 Layer2 Bridging 「不可」同時運作於 Logical Switch 中。
Bridge Instance 會將學習到的VM虛擬主機 MAC Address,傳送給 NSX Controller(更新 ARP Table)。但是,NSX Controller 只會「選定一台 ESXi」來擔任,也就是把 Bridge Instance是跑在 Control VM Active 當中的那台 ESXi 主機上 (以避免過多的 Broadcast 流量影響網路環境)。所以,發生故障事件後,此時 Standby 主機便立即接手成 Active 角色。
現在,讓我們來看看 VXLAN <-> VLAN 之間,網路流量的的 Flow 流向。從 VXLAN -> VLAN 的 ARP 流程,首先說明 ARP Request 在 VXLAN -> VLAN 當中的運作:
1. VM1 發送 ARP Request。
2. 因為 VM1 所在的 ESXi 主機,並不知道目的地端的 VM 虛擬主機 MAC Address(IP3, MAC3)。所以,ESXi 主機便詢問 NSX Controller 目的地 MAC Address。
3. NSX Controller 也不知道目的地 MAC Address,所以 VM1 所在的 ESXi 主機,便送出 Broadcast 給 VXLAN 5001 中所有的 ESXi 主機 (VTEP)。
4. VXLAN 5001 中所有的 ESXi 主機收到 Broadcast 之後,轉發給其上運作的 VM 虛擬主機。
5. 與原有的 ARP 行為一樣,當 VM2 收到後請求封包後,因為跟它無關所以就 Drops Frame。
6. Bridge Instance 同樣的也收到請求封包,因為身上有 VXLAN 5001 及 VLAN 100。
7. 因此將 Broadcast 轉送到 VLAN 100 的實體網路去。
8. 實體交換器收到 Broadcast 後,便針對 VLAN 100 所屬的 Port 號進行封包廣播的動作。
9. VM3 主機收到,並確認自已就是 VM1 要找的機器,進入 ARP Response 的回應動作。
OSPF
AS (Autonomous System) 自治系統區 (Default Area 0, 51),一般來說相同的 AD 會採用 OSPF,不同 AS 則採用 BGP。預設情況下每 10 秒鐘,透過 hello packets 機制(發送用Multicast),尋找附近(鄰居, 身體同一網段共用同 Area ID) Router 的狀態。OSPF 採用 Dijkstra 演算法,來找到最佳路由路徑或最低路由成本 (NSX 支援 OSPF v2)。OSPF Packet 的 Header 為 24 bytes,包含 OSPF 版本、RID(Router ID)、Area ID…etc。預設的 OSPF Area Type 大致三大類 Normal Area, Stub Area, NSSA(Not so Stubby Area),每個 Area 自行維護 Link-State Database。
- Normal Area: 處於 Non-Backbone Area,從 Backbone 接收「Full Routing」資訊。
- Stub Area: 處於 Non-Backbone Area,從 Backbone 接收「Default Route」資訊。
- NSSA: 處於 Non-Backbone Area,從 Backbone 接收「Default Route」資訊。可以導入外部路由並送至 Stub Area,但無法從其它 Area 獲得 AS 外部路由。
IS-IS
其實與 OSPF 機制很像有二種 Level,分別是 Level 1 對應到 OSPF 非骨幹部份,以及 Level 2 對應到 OSPF 骨幹部份。用在大型路由區域的動態路由協定,它座落在 Layer2 所以可以路由「Non-IP Traffic」。BGP
支援 iBGP / eBGP,且 BGP Peer 之間透過 TCP Port 179 進行溝通。NSX Logical Router
Distributed Logical Router 運作在 VMkernel 當中,負責 Data Plane 東西向的流量,可以優化路由及 Data path 且支援單一租戶或多租戶環境。由 NSX Controller 集中「部署、管理」Logical Router,每台 Distributed Logical Router 可以有 1000 Interface,NSX 架構中最多可以有 1200 台 Distributed Logical Router,每台 ESXi Host 最多 100 台 Distributed Logical Router。
以往當 VM 虛擬主機在不同的二台 ESXi 主機要互相溝通時,網路流量一定會流出 Layer2 實體層,這種非最佳流量的傳送行為稱之為「Hairpinning」。
現在,在 NSX 網路虛擬化環境中,當處於不同 VXLAN 的 VM 虛擬主機要互相溝通時,透過 NSX Edge Gateway 轉介,在 Layer3 就處理好整個傳輸流程如下:
1. 雖然二台 VM 虛擬主機身處於同一台 ESXi 主機,但是卻處於不同的 VXLAN 5001/5002。
2. VXLAN 5001 中的 VM 發送 Frame 到 Logical Switch 至 vDS,因為 VM 處於不同 VXLAN 所以 ESXi 將 Frame 轉送到 Default Gateway (也就是 NSX Edge Gateway)。
3. 運作 NSX Edge Gateway 的 ESXi 主機,收到遠端 ESXi 主機傳來的 Frame。
4. 運作 NSX Edge Gateway 的 ESXi 主機,將收到的 Frame 傳給其上運作的 NSX Edge Gateway。
5. NSX Edge Gateway 確認路由路徑後,發回應 Packet 給剛才遠端的 ESXi 主機,一樣到 vDS 然後到 VXLAN 5002 的 Logical Switch。
6. 確認後,傳送 Frame 給 VXLAN 5002 的 VM。
7. VXLAN 5001 的 VM 順利與 VXLAN 5002 的 VM 進行溝通。
Distributed Logical Router
它座落在 VMkernel 層級 (Kernel Module) 中,並且可以處理 VXLAN -> VLXAN 或 VLAN -> VLAN 的流量,也可以處理實體或虛擬網路的路由 (VXLAN -> VLAN 是稍後會介紹的 Layer 2 Bridge 功能)。如同上述範例所說的溝通情境,當二台 VM 虛擬主機在同一台 ESXi 主機,但是卻身處於不同 VXLAN 時,流量到了 ESXi VMkernel 層 (Data Plane) 之後,就可以直接路由流量了(記憶體網路流量),而不必出去問 NSX Edge Gateway 再回來。
由 NSX Controller Cluster 當中的三台來負責分發,LR Control VM 所學習到的路由 (跨 ESXi 主機) 給 Distributed Logical Router。
Distributed Logical Router 擁有 LIFs (Logical Interfaces),你可以想成是實體 Router 的網路介面,它包含了 IP Address、ARP Table,且每台 Distributed Logical Router 可以配置多個 LIFs (最多 1000),分別連接到 Logical Switch 或 vDS Port Group。
在 LIF 當中的 MAC Address 稱為 vMAC(virtual MAC),所有的 VM vMAC 不會儲存到 Layer2 Switch 當中,因為這些 vMAC 是在 VXLAN 當中的,因此實體網路其實看不到 VM,且 VM 會以 vMAC 當成 Default Gateway 的 MAC Address。而 pMAC(physical MAC) 則是對應到 uplink,用來處理 VLAN LIF 以連接到實體網路。
- VXLAN LIF: Distributed Logical Router 用來介接 Logical Switch,採用 vMAC。
- VLAN LIF: Distributed Logical Router 用來介接 vDS Port Group,或其它更多 VLAN,採用 pMAC。
每個 VLAN LIF 中存在一個 Designated Instance,負責解析 ARP 並回應給主機,當 ARP Request 封包送到 vDS Port Group 時,就是由 Designated Instance 負責。NSX Controller會在所有主機中選舉,然後推送 Designated Instance 給勝出的那台主機,當發生故障事件時,NSX Controller 會在存活的主機中再次選舉,然後更新資訊給其它存活主機知悉。
Logical Router Control VM (其實就是 vShield Edge),也是從 NSX Manager 挖 Logical Router Control VM 的 OVA 出來部署,它的 HA 機制是採用 AutoStart Manager 來處理,會再長一台 VM 出來,共二台來達成 Active-Standby,同時在 Firewall 內會多規則 169.254.1.1/30、169.254.1.2/30 來進行 Heartbeat 行為。值得注意的部份是,當啟用/關閉 HA 機制,會暫時無法運作!!
- vCenter *1 (VM)
- NSX Manager *1 (VM, Management Plane)
- NSX Controller *3 (VM, Control Plane, 由 NSX Manager 挖 OVA 部署)
- Logical Router Control VM (VM, Control Plane, 由 NSX Manager 挖 OVA 部署)
- Logical Router is On Daemon (ESXi Kernel Module, Data Plane)
所以 Management, Control, Data Plane,這三個層級之間的網路流量到底是如何進行傳送? 詳見下圖
了解後,我們來看看一些典型部署模型。首先,是比較簡單的「One-Tier」架構。
接著來看看比較複雜的架構「Two-Tier」。
現在,有了 Distributed Router 之後,當 VM 虛擬主機需要互相溝通時,在同一台 ESXi Host 網路流量的流向。簡單來說,當 ARP 封包到 Distributed Router 後,因為在同一台便直接查到 ARP Table,所以直接回覆網路流量並進行後續溝通 (記憶體流量)。
即使二台 VM 位於不同台 ESXi Host,流量也不會跑到實體 Layer2 層,而是在 VXLAN Transport Network 層就處理好。
Layer 2 Bridging
Layer 2 Bridging 簡單來說,是為了「VXLAN <-> VLAN」之間能夠互通。Layer 2 Bridging 必須要搭配 Distributed Router 才行,若是 VXLAN <-> VXLAN 及 VLAN <-> VLAN 則必須要 Layer3 Routing 設備才能夠互通。簡單來說,很重要的原則是,只要是可以在虛擬環境交換的流量都會使用 VXLAN,只有需要到實體網路時才會採用 VLAN 流量。此外,Layer 2 Bridging 的 Data path 完全在 VMkernel 進行交換,在 vDS 的 dvPort Type 中稱為 Sink Port,以進行引導封包的橋樑。請注意!! Distributed Routing 及 Layer2 Bridging 「不可」同時運作於 Logical Switch 中。
Bridge Instance 會將學習到的VM虛擬主機 MAC Address,傳送給 NSX Controller(更新 ARP Table)。但是,NSX Controller 只會「選定一台 ESXi」來擔任,也就是把 Bridge Instance是跑在 Control VM Active 當中的那台 ESXi 主機上 (以避免過多的 Broadcast 流量影響網路環境)。所以,發生故障事件後,此時 Standby 主機便立即接手成 Active 角色。
現在,讓我們來看看 VXLAN <-> VLAN 之間,網路流量的的 Flow 流向。從 VXLAN -> VLAN 的 ARP 流程,首先說明 ARP Request 在 VXLAN -> VLAN 當中的運作:
1. VM1 發送 ARP Request。
2. 因為 VM1 所在的 ESXi 主機,並不知道目的地端的 VM 虛擬主機 MAC Address(IP3, MAC3)。所以,ESXi 主機便詢問 NSX Controller 目的地 MAC Address。
3. NSX Controller 也不知道目的地 MAC Address,所以 VM1 所在的 ESXi 主機,便送出 Broadcast 給 VXLAN 5001 中所有的 ESXi 主機 (VTEP)。
4. VXLAN 5001 中所有的 ESXi 主機收到 Broadcast 之後,轉發給其上運作的 VM 虛擬主機。
5. 與原有的 ARP 行為一樣,當 VM2 收到後請求封包後,因為跟它無關所以就 Drops Frame。
6. Bridge Instance 同樣的也收到請求封包,因為身上有 VXLAN 5001 及 VLAN 100。
7. 因此將 Broadcast 轉送到 VLAN 100 的實體網路去。
8. 實體交換器收到 Broadcast 後,便針對 VLAN 100 所屬的 Port 號進行封包廣播的動作。
9. VM3 主機收到,並確認自已就是 VM1 要找的機器,進入 ARP Response 的回應動作。
接著,來看看 ARP Response 在 VLAN -> VXLAN 當中的運作:
1. VM3 送出ARP Response,變成來源端是 MAC3 而目的地端是 MAC1。
2. ARP 回應封包從 VM 虛擬主機,至運作 VM3 的實體主機及實體交換器的 Port。
3. 將 ARP 回應封包,回給剛才送 ARP 請求的 Port。
4. Bridge Instance 的 VLAN 100 介面,收到 ARP Response 封包。
5. Bridge Instance 記錄學習到的 MAC 後,把 ARP Response 封裝後送給處於 VXLAN 5001 的 VM1。
6. ARP 回應封包,到達 VM1 所在的 ESXi 主機,接收學習後轉送給其上運作的 VM1。
7. VM1 虛擬主機,順利收到 VM3 的回應封包,二台主機後續便可順利溝通。
1. VM3 送出ARP Response,變成來源端是 MAC3 而目的地端是 MAC1。
2. ARP 回應封包從 VM 虛擬主機,至運作 VM3 的實體主機及實體交換器的 Port。
3. 將 ARP 回應封包,回給剛才送 ARP 請求的 Port。
4. Bridge Instance 的 VLAN 100 介面,收到 ARP Response 封包。
5. Bridge Instance 記錄學習到的 MAC 後,把 ARP Response 封裝後送給處於 VXLAN 5001 的 VM1。
6. ARP 回應封包,到達 VM1 所在的 ESXi 主機,接收學習後轉送給其上運作的 VM1。
7. VM1 虛擬主機,順利收到 VM3 的回應封包,二台主機後續便可順利溝通。
透過 Bridge Instance 運作機制,順利橋接二邊 (VLAN <-> VXLAN) 之後,接著便採用 Unicast 的方式,進行後續的溝通處理作業。
1. VM1(VXLAN 5001) 及 VM3(VLAN 100) 的二台虛擬主機,已經完成了 ARP 查找流程。
2. VM1 的 ESXi 主機,已經把學習到的 MAC(VM3),記錄在本身的 MAC Address Table 當中。
3. VM1 的 ESXi 主機,直接把網路流量傳給 Bridge Instance (不用向之前還要 Broadcast 整個 VXLAN)。
4. Bridge Instance 收到後,因為剛才的 ARP 查找流程中,也已經學習到 MAC(VM3)。因此,便可以直接進行轉發作業。
5. Bridge Instance 轉發封包給 VLAN 100 的 Switch。
6. VM3 所在的 ESXi 主機收到封包。
7. VM3 順利收到 VM1 傳來的封包。
後續,從 VLAN 端發起的 ARP Request,以及 VXLAN 回應的 ARP Response,其實與剛才所述內容相同,只是方向不一樣而以。
接著,讓我們來看看 NSX Edge 可以擔任的項目,其中它的 Firewall 功能是指「整體」的(網段...etc),而非 Data Plane 中每台 VM 前的 Distributed Firewall。
由前面的範例情境中,你可以了解到 NSX Edge Gateway,擔任的工作負載也很吃重。所以必須要給序適當的硬體資源,比較特別的部份是當給的資源太少時,系統會「自動補足」成最低的需求 (給超過當然沒問題!!)
此外,先前提到 NSX 網路虛擬化環境支援動態路由機制,這部份的工作負載便是由 NSX Edge Gateway 來負責,支援的動態路由有 OSPF, IS-IS, BGP。最後,針對剛才所述的 NSX Edge Gateway 功能,可能還是覺得很籠統。讓我們來看看它詳細的功能項目:
1. VM1(VXLAN 5001) 及 VM3(VLAN 100) 的二台虛擬主機,已經完成了 ARP 查找流程。
2. VM1 的 ESXi 主機,已經把學習到的 MAC(VM3),記錄在本身的 MAC Address Table 當中。
3. VM1 的 ESXi 主機,直接把網路流量傳給 Bridge Instance (不用向之前還要 Broadcast 整個 VXLAN)。
4. Bridge Instance 收到後,因為剛才的 ARP 查找流程中,也已經學習到 MAC(VM3)。因此,便可以直接進行轉發作業。
5. Bridge Instance 轉發封包給 VLAN 100 的 Switch。
6. VM3 所在的 ESXi 主機收到封包。
7. VM3 順利收到 VM1 傳來的封包。
後續,從 VLAN 端發起的 ARP Request,以及 VXLAN 回應的 ARP Response,其實與剛才所述內容相同,只是方向不一樣而以。
NSX Edge Services Gateway
NSX Edge Gateway (也是 vShield Edge VM),負責南-北向 Plane 的溝通作業,所以會有二隻腳串連上下層 (vDS 及 Logical Switch)。此外,它的 HA 機制也是 AutoStart Manager (Active-Standby HA 機制)。接著,讓我們來看看 NSX Edge 可以擔任的項目,其中它的 Firewall 功能是指「整體」的(網段...etc),而非 Data Plane 中每台 VM 前的 Distributed Firewall。
由前面的範例情境中,你可以了解到 NSX Edge Gateway,擔任的工作負載也很吃重。所以必須要給序適當的硬體資源,比較特別的部份是當給的資源太少時,系統會「自動補足」成最低的需求 (給超過當然沒問題!!)
此外,先前提到 NSX 網路虛擬化環境支援動態路由機制,這部份的工作負載便是由 NSX Edge Gateway 來負責,支援的動態路由有 OSPF, IS-IS, BGP。最後,針對剛才所述的 NSX Edge Gateway 功能,可能還是覺得很籠統。讓我們來看看它詳細的功能項目:
- Firewall
- NAT (Network Address Translation)
- DHCP
- Routing
- Load Balancing
- Site-to-Site VPN
- SSL VPN
- L2VPN
- High Availability
- DNS / Syslog