VXLAN L3應用EVPN,呈現(xiàn)完整overlay網(wǎng)絡
前言
VXLAN(Virtual eXtensible LAN)是一種overlay網(wǎng)絡技術,由RFC7348定義。VXLAN本質(zhì)上是MAC in IP(或者說MAC in UDP),這樣,可以在一個L3 IP網(wǎng)絡上,構建一個L2網(wǎng)絡。這里的L2網(wǎng)絡是overlay網(wǎng)絡,L3網(wǎng)絡是underlay網(wǎng)絡,并且L3網(wǎng)絡對overlay網(wǎng)絡來說是透明的(感知不到)。L3網(wǎng)絡可以是一個數(shù)據(jù)中心的IP網(wǎng)絡,也可以是跨數(shù)據(jù)中心的基于VPN的IP網(wǎng)絡。所以,使用VXLAN可以達到:
- 在一個DC(Data Center)內(nèi)的多個機架或者機房間,提供L2連接。使用VXLAN可以避免在機架或者機房間構建物理的L2連接,這樣在布線上要簡單一些。
- 在多個遠距離的DC之間,提供L2連接,只要這些DC之間有L3連接。
VXLAN為overlay網(wǎng)絡中的主機(物理,虛擬)提供了一個在L3網(wǎng)絡之上的L2服務,這通常稱為VXLAN bridging。同時Overlay的 L2網(wǎng)絡是支持多租戶的,也就是支持多個隔離的L2網(wǎng)絡。這些隔離的L2網(wǎng)絡之間怎么通訊?與其他的隔離技術,例如VLAN一樣,需要通過routing。所以這次說說VXLAN的routing以及EVPN對VXLAN routing的支持。VXLAN routing傳統(tǒng)上是通過集中式的L3GW(VXLAN Router)來完成。所有的L3轉發(fā),都需要經(jīng)過L3 GW,才能從一個L2網(wǎng)絡轉發(fā)到另一個L2網(wǎng)絡。
如果兩個主機,在不同的VXLAN L2網(wǎng)絡,但是在同一個VTEP(VXLAN Tunnel Endpoint)下面,當它們彼此想通訊時,網(wǎng)絡流量也要先從VTEP流向L3GW,在L3GW完成3層轉發(fā),再回送到同一個VTEP。這種繞啊繞的流量是一種發(fā)卡(hair-pin)流量。按照這種方式,VXLAN routing已經(jīng)實現(xiàn)了,但這里有兩個問題,一個是流量瓶頸,集中式的L3GW的性能決定了三層流量的最大速率;另一個是發(fā)卡流量,發(fā)卡流量會帶來不必要的網(wǎng)絡負載。
EVPN可以作為VXLAN的控制層面,EVPN技術為VXLAN的L3優(yōu)化也提出了解決方法。下面看看EVPN怎么完成的VXLAN routing,首先看一下EVPN提出的數(shù)據(jù)層面的優(yōu)化,接著介紹EVPN作為控制層面如何支持優(yōu)化過的數(shù)據(jù)層面。
一、Routing和Bridging集成
VTEP本身是支持L2橋接(Bridging),同一個VTEP連接的主機之間的L2通訊,不會生成VXLAN數(shù)據(jù),而是直接在VTEP就完成轉發(fā)。VXLAN IRB(Integrated Routing and Bridging)是指在VTEP上同時實現(xiàn)L2橋接和L3路由(Routing)功能。同一個VTEP下面的L3流量也不會生成VXLAN數(shù)據(jù),只是在VTEP完成轉發(fā)。
有關IRB的實現(xiàn),在EVPN的一份應用草案Integrated Routing and Bridging in EVPN有描述。
1.1 VRF
VRF可以稱為Virtual Routing&Forwarding,有時候也稱為VPN Routing&Forward,這是一個類似Linux network Namespace的東東。VRF一般運行在專用網(wǎng)絡設備上,每一個VRF都有獨立的轉發(fā)信息。這樣,不需要多個設備,而只是在一個設備上,就可以為多個租戶創(chuàng)建隔離的環(huán)境,每個租戶用自己VRF,獨立完成路由轉發(fā)。下圖中,在一個設備上就可以為三個租戶實現(xiàn)三個隔離的VRF。
既然叫VRF,那么沒有懸念,它的功能是跟路由/轉發(fā)聯(lián)系在一起。在EVPN里面,VRF有兩種,MAC-VRF和IP-VRF。MAC-VRF可以看成L2交換機,IP-VRF可以看成L3路由器。它們之間的關系如下圖所示:
1.2 分布式網(wǎng)關DAG
路由器的工作方式就是在網(wǎng)關(Gateway)之間進行路由轉發(fā),既然IP-VRF可以看成路由器,那么IP-VRF也需要網(wǎng)關。前面說了集中式網(wǎng)關的問題,一般集中式的問題,分布式來解決,所以這里定義一個分布式網(wǎng)關:DAG(Distributed Anycast Gateway)。DAG在所有VTEP上的相關IP-VRF里都存在,并且具有相同的MAC/IP地址。也就是說,原來集中式的VXLAN L3 GW,被復制了多份,分別放在了每個VTEP中,并且插入在IP-VRF上,相應的示意圖如下所示,同一租戶的同一個Gateway,在每個VTEP上都有。
由于DAG在每個VTEP上都有,前面的兩個問題都不存在了。首先,瓶頸問題不存在了,因為現(xiàn)在瓶口變多了;其次發(fā)卡流量問題不存在了,因為VTEP就有網(wǎng)關,同一個VTEP下的L3轉發(fā)可以不出VTEP(不生成VXLAN)。DAG在所有的VTEP上采用相同的IP/MAC,一方面可以減少IP的占用,另一方面主機從一個VTEP遷移到另一個VTEP,主機內(nèi)的Gateway信息不需要更新。
當VTEP連接的主機需要做L3路由轉發(fā)時,總是選用最近的DAG,也就是當前VTEP上的DAG,來完成路由轉發(fā)。這里的路由轉發(fā)怎么完成?有兩種方式。
1.3 非對稱路由IRB
非對稱路由,以下圖為例,我們可以看到一次完整請求的來回路徑不一樣,所以這種模式被稱為非對稱路由(Asymmetric IRB)。
以ping為例子來說明吧,當Host A訪問Host B時。Host A將ping包發(fā)送到自己所連接的VTEP1(V1)。由于這是一個跨子網(wǎng)的請求,在Host A中會將ping包的目的MAC地址封裝成網(wǎng)關的地址(DAG MAC地址)。根據(jù)目的MAC地址,VTEP1可以發(fā)現(xiàn)這是一個需要做L3轉發(fā)的請求,所以轉到IP-VRF處理。IP-VRF中會存有Host B對應的VXLAN ID和MAC地址。為什么會有?這是EVPN控制層完成的,后面會介紹。接下來VTEP1會將Host B的MAC替換ping包里面的目的MAC(原來是DAG MAC),并且用VXLAN ID將ping包封裝在VXLAN包中,通過黃色VXLAN tunnel 發(fā)送給VTEP3(V3)。黃色的VXLAN實際就是Host B所在的VXLAN。
VTEP3收到黃色VXLAN tunnel發(fā)來的數(shù)據(jù),直接在自己的MAC-VRF中處理,前面說過MAC-VRF相當于L2交換機,因此MAC-VRF可以直接將請求轉到當前VTEP直連的Host B。整體的流程如下所示:
Host B向Host A返回數(shù)據(jù)時,先發(fā)送給VTEP3,類似的,直接在VTEP3將數(shù)據(jù)封裝成Host A所在的藍色VXLAN數(shù)據(jù),發(fā)送給VTEP1。同樣類似的,VTEP1收到藍色的VXLAN數(shù)據(jù),在本地的通過本地的MAC-VRF查找,找到對應的MAC地址記錄,發(fā)送給Host A。
找了個ARISTA的圖(侵刪),所以可以看出,路由發(fā)生在源VTEP,之后才做VXLAN封裝,走VXLAN的二層網(wǎng)絡:
1.4 Symmetric IRB
對稱路由,以下圖為例,我們可以看到一次完整請求的來回路徑是一樣的,所以這種模式被稱為對稱路由(Symmetric IRB)。
對稱路由與非對稱路由的區(qū)別在于,對稱路由多了一個黑色的L3 VNI。
還是以ping為例子來說明吧,當Host A訪問Host Y時。Host A將ping包發(fā)送到自己所連接的VTEP1(V1),由于這是一個跨子網(wǎng)的請求,在Host A中會將ping包的目的MAC地址封裝成網(wǎng)關的地址(DAG MAC地址)。根據(jù)目的MAC地址,VTEP1可以發(fā)現(xiàn)這是一個需要做L3轉發(fā)的請求,所以轉到IP-VRF處理。到此為止,都與非對稱路由一樣,接下來是不一樣的部分。在IP-VRF中存的是L3 VNI和Host Y所在的VTEP3(V3)的MAC地址。接下來,VTEP1會用VTEP3的MAC地址替ping包的目的MAC(原來是DAG MAC),并且用L3VNI封裝VXLAN數(shù)據(jù),通過黑色的VXLAN tunnel,發(fā)送給VTEP3。
VTEP3收到黑色VXLAN數(shù)據(jù),首先在自身的IP-VRF中做路由,再發(fā)送到相應的MAC-VRF,最后轉發(fā)給Host Y?;爻淌穷愃频牧鞒獭?/p>
整體流程如下圖所示:
對比這兩種路由方式,非對稱路由(Asymmetric IRB)實現(xiàn)簡單,沒有額外的VXLAN分配,但是需要在所有的VTEP上創(chuàng)建所有子網(wǎng)的網(wǎng)關,即便當前VTEP沒有連接子網(wǎng)中的主機。因為從上面的圖可以看出,VTEP需要同時連接非對稱的兩條VXLAN tunnel,即使VTEP1沒有黃色VXLAN中的Host。對稱路由(Symmetric IRB),實現(xiàn)更復雜,但是VTEP只需要連接自己管理主機的VXLAN和L3 VNI即可。這兩種分布式路由方式各有利弊,誰也替代不了誰,有些廠商兩種方式都實現(xiàn)了,有些只實現(xiàn)了一種。
二、VXLAN Routing控制層
前面的介紹提到了MAC-VRF和IP-VRF。MAC-VRF實現(xiàn)bridging,MAC-VRF中存的是L2轉發(fā)信息,L2轉發(fā)信息的傳遞在上一篇VXLAN with EVPN as Control Plane中有介紹,我就不再重復,感興趣的可以回去看看。接下來單獨看一下EVPN如何傳遞IP-VRF中所需的L3轉發(fā)信息。
先回顧一下,EVPN作為VXLAN控制層時,MAC/IP Route(Route type 2)的格式。
對于L2信息的傳遞,里面有兩個可選項:IP Address和L3 VXLAN ID。如果還需要傳遞L3信息,這兩個選項將不再是可選項,首先IP地址必須填上,這樣IP-VRF做包封裝的時候,才能夠根據(jù)目的IP獲取信息。如果采用Symmetric IRB,L3 VXLAN ID也必須填上,因為對稱路由需要有一個專門的VXLAN通道來傳遞L3數(shù)據(jù)。
接下來過一下控制層數(shù)據(jù)傳遞過程,VTEP還是通過Local learning(檢測ARP或者其他的包)獲取本地連接主機的IP/MAC,再生成BGP Route。這條BGP Route里面,實際包含了MAC轉發(fā)信息和IP轉發(fā)信息。因此在BGP Route之后,會跟兩份RT(Route Targets),一份為了MAC-VRF,另一份為了IP-VRF。對端的VTEP,根據(jù)RT接收相應的BGP Route,MAC-VRF記錄MAC轉發(fā)信息,IP-VRF記錄IP轉發(fā)信息,具體如下:
- Asymmetric IRB:IP-VRF會記錄Host的IP,Host對應的L2 VNI,Host所在的VTEP信息,以及Host的MAC地址。有這些信息,IP-VRF就能夠根據(jù)目的IP地址完成L3轉發(fā)以及VXLAN數(shù)據(jù)封裝。
- Symmetric IRB:IP-VRF會記錄Host的IP,Host對應的L3 VNI,Host所在的VTEP信息(這里會更復雜一些)。有這些信息,IP-VRF就能夠根據(jù)目的IP地址完成相應的L3轉發(fā)VXLAN數(shù)據(jù)封裝。
所以可以看出,在原有的Route type2中注入可選的IP地址和L3 VXLAN ID,就可以傳遞VXLAN routing所需要的信息。
這種模式適合VTEP下直接連接的就是主機,且一個租戶網(wǎng)絡的主機分散在各個VTEP下,每個VTEP都連接擁有離散的IP地址的主機。
如果VTEP下面連接的不是主機,而是其他轉發(fā)設備,例如路由器呢?這個時候,VTEP會看到大量連續(xù)的IP地址從同一個MAC地址發(fā)出(路由器網(wǎng)關MAC地址),如果這個時候還是用Route Type 2,有以下問題:
- 明明是一個IP prefix(路由器連接的其他子網(wǎng)的CIDR)可以表示的IP地址段,現(xiàn)在只能每個IP發(fā)出單獨的BGP route。也就是說,明明一條BGP route就能搞定的轉發(fā),現(xiàn)在只能分成成千上萬條BGP route進行轉發(fā)。
- 當路由器網(wǎng)關是floatingip時,如果發(fā)生了遷移,IP地址將保持不變,但是對應的MAC地址可能會發(fā)生變化,那么所有通過網(wǎng)關轉發(fā)出來的IP地址都需要發(fā)一遍BGP Route,來更新MAC地址的變化。
三、Route Type 5
所以,為了支持在VTEP下連接轉發(fā)設備,并且支持VXLAN L3,EVPN需要進一步改進(擴充)。EVPN的另一個應用草案,IP Prefix Advertisement in EVPN解決了上面的問題。先來回顧一下EVPN所有新增的MP-BGP路由種類。
所以這次到了Route type 5,來看看Route Type 5的格式。
對于VXLAN來說,只需要關注以下內(nèi)容:
- IP Prefix Length和IP Prefix:目的IP地址段。
- GW IP Address:VTEP可達的網(wǎng)關,IP Prefix表示的IP地址段都通過這個網(wǎng)關進一步轉發(fā)。
Route Type 5并非單獨使用,而是配合前面的Route Type2一起使用。VTEP首先會將自己連接的GW IP(例如路由器網(wǎng)關)及其對應的MAC地址和其他信息,封裝在Route Type 2中,再發(fā)送到其他VTEP。這樣,其他的VTEP首先知道了如何到達GW IP。這里可以把GW IP看成一個Host IP。
接下來再發(fā)送Route Type 5,從上面的圖可以看出,Route Type 5唯一做的就是將一段IP地址(IP Prefix),與GW IP關聯(lián)在一起。
我們來回顧一下上面兩個問題:
- 有關IP Prefix的L3轉發(fā)信息傳播。現(xiàn)在不管IP Prefix長度是多少,只需要一條Route Type 2傳遞網(wǎng)關,再來一條Route Type 5傳遞IP Prefix信息。當VTEP(IP-VRF)收到了目的IP地址在IP Prefix的網(wǎng)絡包時,根據(jù)IP Prefix找到GW IP,再將網(wǎng)絡包發(fā)送到GW IP。只要網(wǎng)絡包到達了GW IP,就可以依賴GW自身的轉發(fā)能力,將網(wǎng)絡包繼續(xù)轉發(fā)到真正的設備。這實際上跟現(xiàn)實中的多個路由器轉發(fā)類似。
- 如果GW IP是floatingip,當其MAC地址發(fā)生變化,只需要先發(fā)送一條BGP withdraw命令,撤回之前有關GW IP的Route Type 2信息,之后再發(fā)送一條新的BGP Route Type 2,將GW IP的新MAC地址帶上即可,完全不用處理IP Prefix的更新。
四、總結
VXLAN L3中應用EVPN大體情況說完了。回過頭來看,EVPN最早提出是為了解決MPLS L2 VPN由于數(shù)據(jù)層學習(flood-learn)帶來的問題,解決辦法是在MP-BGP基礎上,新增了EVPN協(xié)議地址族,其中E是Ethernet。隨著技術的發(fā)展,EVPN已經(jīng)不再局限在L2的范圍,而在討論EVPN的時候,也不再特指一種L2 VPN,而是指MP-BGP中的一種協(xié)議地址族。
另一方面,由于VXLAN本身并未設計控制層,VXLAN提出的最開始也是通過數(shù)據(jù)層學習獲得轉發(fā)信息,因此,EVPN也可以用來為VXLAN提供一個控制層,抑制VXLAN的BUM包,提升VXLAN數(shù)據(jù)層的效率。EVPN作為VXLAN的控制層,同時提供了L2、L3轉發(fā)信息的傳遞,所以結合EVPN和VXLAN,可以提供一個完整的overlay基礎網(wǎng)絡。
這些目前都還是在一個數(shù)據(jù)中心內(nèi)部。VXLAN本身可以在任意的underlay L3網(wǎng)絡之上構建overlay網(wǎng)絡,文章最開始說過,如果跨DC之間有L3網(wǎng)絡連接,VXLAN同樣也可以構建。所以,EVPN結合VXLAN的另一大用途就是用來做DC互聯(lián),希望下次有機會再說說這方面。
作者簡介:肖宏輝,畢業(yè)于中科院研究生院,8年的工作經(jīng)驗,其中6年云計算開發(fā)經(jīng)驗,OpenStack社區(qū)積極活躍,有超過300個commit和超過30000行代碼的貢獻。目前關注SDN/NFV等虛擬網(wǎng)絡技術。本文所有觀點僅代表作者個人觀點,與作者現(xiàn)在或者之前所在的公司無關。