想寫個DC系列的文章,站在傳統路由交換網絡基礎上談談數據中心網絡,一方面是給自己的學習做下總結,另一方面也想分享一些東西。
談到數據中心網絡,能想到的東西無非就VXLAN、SDN、NFV、EVPN這些概念。先從基礎協議開始再談整體架構,才疏學淺,有不對的地方請評論告知。首先針對性地拋出幾個問題:
1、為什么用VXLAN?使用場景有哪些?
在傳統網絡中分二層三層。隨着雲計算的普及,雲主機無縫遷移的需求成了常態。為解決雲主機跨三層網絡的遷移,並且要滿足遷移后雲內網絡架構包括雲主機IP地址不能發生改變的要求孕育了大二層技術。要實現跨三層的二層網絡通信實際上就要用到隧道技術。隧道技術的解決方案也有很多,其中包括本文要講的VXLAN,還有NVGRE、STT、TRILL、VPLS等。NVGRE是由微軟提出的,只支持服務器使用。STT是Nicira這家公司提出的,Nicira已經被VMWARE收購,STT也不支持交換機使用。提到Nicira,除了STT最大的成就就是開發了Open vSwitch和Neutron(Openstack的網絡組件),而TRILL和VPLS僅僅交換機支持。所以用VXLAN解決大二層問題最為合理,而且還符合IETF標准。
很多人在剛接觸雲平台架構的時候會有個疑問,拿Openstack舉例來說,在Neutron組件中可以啟用VXLAN,那這里與交換機的VXLAN有什么關系?前面說到VXLAN是通用協議,可以在網絡設備上使用,也可以在服務器上使用。先假設這個世界還沒有Openstack等雲架構,那么一台虛擬機要實現大二層遷移,怎么辦?這個時候VXLAN是做在上層交換設備上。那么Neutron組建的VXLAN功能有什么用?有些雲網絡中,可以借助Neutron的VXLAN功能實現大二層需求滿足雲主機遷移和互訪,然后用另一張網卡實現互聯網的訪問,如圖1。阿里雲飛天架構大二層網絡也是用VXLAN實現,封裝與解封裝均在服務器側,不同的是出公網的方式采用的是在一台服務器解封裝后做了NAT轉換的形式。
圖1 Openstack VXLAN網絡
實際上一般較大型的數據中心架構,雲主機依靠VLAN進行隔離,不,准確的來說是租戶標識。拿Openstack來說,Neutron使用了VLAN功能,而上千個VLAN號對應租戶量已經足夠使用。雲主機帶着VLAN TAG出來后,再由交換機根據不同的VLAN TAG進行VXLAN封裝隧道來實現大二層,如圖2。這里專門映射VXLAN和VLAN的對應關系稱為橋接域。拿國產設備來說,叫bridge-domain。租戶的隔離則是通過路由標識來實現。
圖2 交換機實現大二層網絡
在談到什么時候用VXLAN的時候,從雲計算角度出發,以上舉的例子都是IAAS層面的情景,還有PAAS層面的。例如容器編排調度工具kubernetes,有幾套網絡模型用來實現容器之間的互相通信,我們稱為CNI(container network interface),包括Flannel、Calico、macvlan、OpenvSwitch等,其中Flannel網絡模型就是用VXLAN來實現不同容器在宿主機的隧道模式通信的。
2、VXLAN報文格式
VXLAN數據包也可以稱為MACINUDP數據包,原本數據鏈路層允許的最大以太網數據包長度是1500字節,然而數據包經過VTEP(VXLAN的隧道端點)封裝后數據包會增加50字節,數據包格式如圖3。那么VXLAN報文長度最大達到了1550,現在有些VTEP在處理VXLAN報文的時候並不接受分片,這就需要配置設備MTU1550了。
圖3 VXLAN報文
報文的詳細分解可以看圖4,所以VXLAN是使用UDP封裝在了傳輸層,目標端口是4789,源端口是隨機的,根據源MAC地址進行HASH產生。至於為什么源端口隨機,有一個很大的好處就是可以實現ECMP,如果源端口一成不變將導致網絡只走一條路。而用來封裝數據包的三層IP地址一般是設備的環回口地址,至於環回口地址的發布用OSPF、ISIS、BGP都可以,只要滿足三層互通就可以。
圖4 VXLAN報文分解
3、怎么配?
列舉了一個VTEP端的華為配置,基本上看到配置就明白什么意思了,另一端配置同理。
4、EVPN是什么?和VXLAN是什么關系?
EVPN要講的東西很多,會專門用一章來講,至於為什么要用,這里先說下VXLAN的廣播泛洪問題。首先介紹下BUM報文,BUM即broadcast unicast multicast,數據包在發送到一個VTEP端的時候會進行頭端復制,怎么理解頭端復制呢?其實有點類似二層廣播泛洪,一個數據包到了VTEP以后,VTEP設備根據VLAN信息找到了對應的二層廣播域,前面看配置知道,有了二層廣播域以后,對應的VNI編號也知道了,也就是知道了所有隧道列表,然后會把數據包進行報文復制,然后進行VXLAN封裝轉發到對端的多個VTEP上。對端VTEP收到報文后對VNI等信息核對,核對完后解封裝。解封裝后進行廣播處理。數據中心網絡中,特別是雲平台網絡中,終端數量是成百上千的,每個終端都發起一個ARP請求,每個請求都進行一次頭端復制那是很不合理的呀,由此就引入了ARP抑制。
ARP抑制是一種優化機制,由於VXLAN的引入,就有了二層網關的說法,在二層網關上會存在一個IP和MAC對應關系的表,稱為ARP抑制表。當二層ARP請求發起的時候,會查找目標MAC地址有沒有在這個ARP抑制表里,如果有,目標泛洪廣播幀中FFFFFFFF會就改成實際目標MAC地址,變成一個單播幀。而有些網絡設備,比如思科的做法是代答的方式,當發現抑制表里有,就直接由二層代答,不進行頭端復制泛洪。那么問題來了,ARP抑制表怎么來的?綜上所述,VXLAN是沒有控制平面的,所有轉發都是通過泛洪獲得轉發信息,那么二層路由信息的獲取,用來找到對應的VTEP來避免泛洪,實現VXLAN的控制層面,就要借助EVPN了。EVPN依靠BGP擴展團體屬性,用於控制IP地址和MAC的路由信息的發布與接收。EVPN的更多技術細節包括與VXLAN的配合使用在第二章分享。而在第三章中分享的是Data Center Interconnection的實現。