opencontrail—VXLAN模式下數據包的傳輸過程


在這篇文章中,我們將看到VM生成的數據包如何能夠到達另一個VM或外部資源,Neutron使用OpenContrail插件的上下文中的關鍵概念/組件是什么。

我們將重點介紹OpenContrail,它如何實現覆蓋以及它提供的工具來檢查/解決數據包的轉發方式。

在開始之前,我將簡要介紹一下OpenContrail的關鍵概念。

Virtual networks, Overlay with OpenContrai

對於OverlayOpenContrail使用MPLS, L3VPNsMPLS EVPN來解決l3覆蓋和l2覆蓋。OpenContrail中有很多組件,但我們將關注兩個關鍵組件 : controllerthe vRouter.

對於控制平面,每個控制器使用BGPXMPP協議充當BGP路由反射器。BGP用於控制器和物理路由器之間。控制器和vRouters之間使用XMPP。XMPP協議傳輸BGP路由公告以及其他一些非路由需求的信息。

對於數據平面,OpenContrail支持用於隧道的GRE / VXLAN / UDP。OpenContrail要求網關路由器支持以下功能:

在這篇文章中,我們將重點關注數據平面區域。

包的旅程

為了展示數據包的旅程,讓我們使用以下拓撲,我們在兩個不同的網絡上有兩個虛擬機,這要歸功於路由器。

假設我們通過相應地設置安全組來允許ICMP數據包,我們可以從vm1vm2開始ping 。

OpenContrail中有許多內省工具可用於清楚地了解數據包的轉發方式。

vm1vm2之間啟動ping ,我們可以逐步檢查數據包的去向。

由於VM不在同一網絡上,因此它們都將使用其默認網關。本地vRouter用自己的MAC應答默認網關IP的ARP請求。

現在我們已經看到數據包將被轉發到本地vRouter,我們將檢查vRouter將如何轉發它們。

因此,首先通過瀏覽在托管我們的VM的計算節點上運行的vRouter代理內省Web界面來檢查數據平面層,地址為http:// <vrouter agent ip>:8085 / agent.xml,一般情況下可以通過計算節點的IP地址來訪問

有很多子接口,但我們只使用其中的三個:

  • VrfListReq,http://<vrouter agent ip>:8085/Snh_VrfListReqWhic為您提供相關的網絡和VRF。對於給定的VRF - 讓我們說單播VRF(ucindex) - 我們可以看到所有的路線。

  • ItfReq,http://<vrouter agent ip>:8085/Snh_ItfReqWhich為您提供vRouter處理的所有接口。

  • MplsReq,http//<vrouter agent ip>:8085/Snh_MplsReqWhich為給定的vRouter提供所有關聯MPLS Label / NextHop

由於XSL樣式表,這些接口只是XML文檔呈現,因此可以通過某些監視腳本輕松處理。

我們可以從接口(ItfReq)內省頁面開始,找到與VM1對應的TAP接口。TAP的名稱包含中子端口ID的一部分。

在界面旁邊,我們看到與該界面所屬的網絡相關聯的VRF名稱。在同一行,我們有一些其他信息,安全組,浮動ips,VM ID等。

單擊VRF鏈接將我們帶到此VRF的索引頁面。我們看到我們根據其類型鏈接到VRF:單播,多播,第2層。默認情況下,OpenContrail不處理第2層。如前所述,來自虛擬機的大多數第2層流量都被本地捕獲vRouter充當ARP響應者。但是仍然需要處理一些像廣播這樣的特定數據包,這就是為什么存在特定的第2層VRF。

單擊ucindex(Unicast)列中的鏈接,我們可以看到此vRouter處理的虛擬網絡的所有單播L3路由。由於vm1應該能夠達到vm2,我們應該看到IP為vm2的路由。

由於這個接口,我們看到為了達到IP 192.168.0.3這是我們的vm2的IP ,數據包將通過GRE隧道轉發,其端點是托管vm2的計算節點的IP 。這就是我們在“ dip ”(目標IP)字段中看到的內容。我們看到數據包將封裝在VXLAN數據包中。MPLS標簽為16,如標簽欄中所示。

好的,我們在代理級別看到了數據包將如何轉發,但我們可能想要檢查數據路徑方面。OpenContrail為此提供命令行工具。

例如,在代理的情況下,我們可以看到vRouter內核模塊和關聯的VRF處理的接口。

我們在此索引3處具有TAP接口,並且相關聯的VRF為數字1。

現在讓我們檢查一下這個VRF的路線。為此,我們使用rt命令行。

為了知道如何轉發數據包,我們必須檢查用於此路由的NextHop。

我們有幾乎相同的代理人給我們的信息。在Oif字段中,我們有一個接口,將數據包發送到另一個計算節點。感謝vif命令行,我們可以獲得有關此接口的詳細信息。

由於數據包將通過bond1.89接口,因此tcpdump應該確認我們上面描述的內容。

如隧道端點所示,數據包將直接轉發到托管目標VM的計算節點,而不是使用第三方路由設備。

另一方面,第二計算節點上的vRouter將接收封裝的數據包。根據MPLS標簽,它在MPLS Label / NextHop上進行查找,正如我們在內省時所看到的那樣。

正如我們在這里看到的,Label 17的NextHop字段是我們第二個VM的TAP接口。在數據路徑方面,我們可以檢查相同的信息。檢查MPLS Label / NextHop表:

最后是NextHop和帶有以下命令的接口:

這篇文章只是概述了數據包如何從一個節點轉發到另一個節點,以及可用於故障排除目的的接口/工具是什么。OpenContrail的一個有趣之處在於,幾乎所有組件都有自己的內省界面,可以在故障排除會話期間為您提供很多幫助。正如我們所看到的,路由完全分布在OpenContrail中,每個vRouter使用眾所周知的路由協議(如BGP / MPLS)處理部分路由,這證明了它們的擴展能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM