任何技術的産生,都有其特定的時代背景與實際需求,VXLAN正是為了解決雲計算時代虛拟化中的一系列問題而産生的一項技術。
雲計算,憑借其在系統使用率高、人力/管理成本低、靈活性/可擴充性強等方面表現出的優勢,已經成為目前企業IT建設的新形态;而在雲計算中,大量的采用和部署虛拟化是一個基本的技術模式。
伺服器虛拟化技術的廣泛部署,極大地增加了資料中心的計算密度;同時,為了實作業務的靈活變更,虛拟機VM(Virtual Machine)需要能夠在網絡中不受限遷移(如圖1-1所示)。實際上,對于資料中心而言,虛拟機遷移已經成為了一個常态性業務。
圖1-1 虛拟機遷移
虛拟機數量的快速增長與虛拟機遷移業務的日趨頻繁,給傳統的“二層+三層”資料中心網絡帶來了新的挑戰:
l 虛拟機規模受網絡裝置表項規格的限制
對于同網段主機的通信而言,封包通過查詢MAC表進行二層轉發。伺服器虛拟化後,資料中心中VM的數量比原有的實體機發生了數量級的增長,伴随而來的便是虛拟機網卡MAC位址數量的空前增加。此時,處于接入側的二層裝置表示“我要Hold不住了”!
一般而言,接入側二層裝置的規格較小,MAC位址表項規模已經無法滿足快速增長的VM數量。
l 傳統網絡的隔離能力有限
VLAN作為目前主流的網絡隔離技術,在标準定義中隻有12比特,也就是說可用的VLAN數量隻有4000個左右。對于公有雲或其它大型虛拟化雲計算服務這種動辄上萬甚至更多租戶的場景而言,VLAN的隔離能力顯然已經力不從心。
l 虛拟機遷移範圍受限
虛拟機遷移,顧名思義,就是将虛拟機從一個實體機遷移到另一個實體機,但是要求在遷移過程中業務不能中斷。要做到這一點,需要保證虛拟機遷移前後,其IP位址、MAC位址等參數維持不變。這就決定了,虛拟機遷移必須發生在一個二層域中。而傳統資料中心網絡的二層域,将虛拟機遷移限制在了一個較小的局部範圍内。
值得一提的是,通過堆疊、SVF、TRILL等技術建構實體上的大二層網絡,可以将虛拟機遷移的範圍擴大。但是,建構實體上的大二層,難免需要對原來的網絡做大的改動,并且大二層網絡的範圍依然會受到種種條件的限制。
傳統資料中心網絡的種種限制,推動了新技術的産生。于是,在VMware、Cisco等全球知名廠商的共同推動下,VXLAN粉墨登場。
VXLAN(Virtual eXtensible Local Area Network,虛拟擴充區域網路),是由IETF定義的NVO3(Network Virtualization over Layer 3)标準技術之一,采用L2 over L4(MAC-in-UDP)的封包封裝模式,将二層封包用三層協定進行封裝,可實作二層網絡在三層範圍内進行擴充,同時滿足資料中心大二層虛拟遷移和多租戶的需求。
NVO3是基于三層IP overlay網絡建構虛拟網絡的技術的統稱,VXLAN隻是NVO3技術之一。除此之外,比較有代表性的還有NVGRE、STT。
在回答VXLAN如何解決前面提到的問題之前,先讓我們來了解下VXLAN的網絡模型。
圖2-1 VXLAN網絡模型
從上圖中可以發現,VXLAN網絡中出現了以下傳統資料中心網絡中沒有的新元素:
l VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端點)
VXLAN網絡的邊緣裝置,是VXLAN隧道的起點和終點,VXLAN封包的相關處理均在這上面進行。總之,它是VXLAN網絡中絕對的主角。VTEP既可以是一台獨立的網絡裝置(比如華為的CE系列交換機),也可以是虛拟機所在的伺服器。那它究竟是如何發揮作用的呢?答案稍候揭曉。
l VNI(VXLAN Network Identifier,VXLAN 網絡辨別符)
前文提到,以太網資料幀中VLAN隻占了12比特的空間,這使得VLAN的隔離能力在資料中心網絡中力不從心。而VNI的出現,就是專門解決這個問題的。VNI是一種類似于VLAN ID的使用者标示,一個VNI代表了一個租戶,屬于不同VNI的虛拟機之間不能直接進行二層通信。VXLAN封包封裝時,給VNI配置設定了足夠的空間使其可以支援海量租戶的隔離。詳細的實作,我們将在後文中介紹。
l VXLAN隧道
“隧道”是一個邏輯上的概念,它并不新鮮,比如大家熟悉的GRE。說白了就是将原始封包“變身”下,加以“包裝”,好讓它可以在承載網絡(比如IP網絡)上傳輸。從主機的角度看,就好像原始封包的起點和終點之間,有一條直通的鍊路一樣。而這個看起來直通的鍊路,就是“隧道”。顧名思義,“VXLAN隧道”便是用來傳輸經過VXLAN封裝的封包的,它是建立在兩個VTEP之間的一條虛拟通道。
看到這裡,愛思考的你肯定又要問了,VXLAN網絡模型為什麼是長這個樣子滴?前文已經講到,VXLAN是為了解決雲計算時代虛拟化中的一系列問題而産生的一項技術。下面就讓我們來看下,基于圖2-1的網絡模型, VXLAN是如何見招拆招來解決這一系列問題的。
l 招式一:隐形
對于“虛拟機規模受網絡裝置表項規格的限制”這個問題,可能有人會想:換成規格大一些的接入交換機(比如跟核心或網關同檔次的裝置)不就行了。我隻能說,如果你是“壕”,确實可以這麼做。但是在不提高網絡建設成本的前提下,如何能解決問題呢?
既然無法提升裝置表項規格,那就隻能限制裝置上的MAC表項,将大量VM的MAC位址“隐形”。那麼,如何做到隐形呢?這時,就該VTEP出場了。
VTEP會将VM發出的原始封包封裝成一個新的UDP封包,并使用實體網絡的IP和MAC位址作為外層頭,對網絡中的其他裝置隻表現為封裝後的參數。也就是說,網絡中的其他裝置看不到VM發送的原始封包。
如果伺服器作為VTEP,那從伺服器發送到接入裝置的封包便是經過封裝後的封包,這樣,接入裝置就不需要學習VM的MAC位址了,它隻需要根據外層封裝的封包頭負責基本的三層轉發就可以了。是以,虛拟機規模就不會受網絡裝置表項規格的限制了。
當然,如果網絡裝置作為VTEP,它還是需要學習VM的MAC位址。但是,從對封包進行封裝的角度來說,網絡裝置的性能還是要比伺服器強很多。
l 招式二:擴容
對于“傳統網絡的隔離能力有限”這個問題,VXLAN采用了“擴容”的解決方法,引入了類似VLAN ID的使用者标示,也就是前文提到的VNI。一個VNI代表了一個租戶,屬于不同VNI的虛拟機之間不能直接進行二層通信。VTEP在對封包進行VXLAN封裝時,給VNI配置設定了24比特的空間,這就意味着VXLAN網絡理論上支援多達16M(即:224-1)的租戶隔離。相比VLAN,VNI的隔離能力得到了巨大的提升,有效得解決了雲計算中海量租戶隔離的問題。
l 招式三:暗度陳倉
前面提到,為了保證業務不中斷,VM的遷移就必須發生在同一個二層域内。現在,再回頭看下VXLAN網絡模型,你是不是驚奇地發現,有了VTEP的封裝機制和VXLAN隧道後,所謂的 “二層域”就可以輕而易舉的突破實體上的界限?也就是說,在IP網絡中, “明”裡傳輸的是跨越三層網絡的UDP封包,“暗”裡卻已經悄悄将源VM的原始封包送達目的VM。就好像在三層的網絡之上,建構出了一個虛拟的二層網絡,而且隻要IP網絡路由可達,這個虛拟的二層網絡想做多大就做多大。現在,你應該明白為什麼說VXLAN是一種NVO3技術了吧。
看過上面的描述,你一定對于封裝後的VXLAN封包有了自己的想象。下面就讓我們來看下,VXLAN封包到底長啥樣。
圖2-2 VXLAN封包格式
如你所料,VTEP對VM發送的原始以太幀(Original L2 Frame)進行了以下“包裝”:
l VXLAN Header
增加VXLAN頭(8位元組),其中包含24比特的VNI字段,用來定義VXLAN網絡中不同的租戶。此外,還包含VXLAN Flags(8比特,取值為00001000)和兩個保留字段(分别為24比特和8比特)。
l UDP Header
VXLAN頭和原始以太幀一起作為UDP的資料。UDP頭中,目的端口号(VXLAN Port)固定為4789,源端口号(UDP Src. Port)是原始以太幀通過雜湊演算法計算後的值。
l Outer IP Header
封裝外層IP頭。其中,源IP位址(Outer Src. IP)為源VM所屬VTEP的IP位址,目的IP位址(Outer Dst. IP)為目的VM所屬VTEP的IP位址。
l Outer MAC Header
封裝外層以太頭。其中,源MAC位址(Src. MAC Addr.)為源VM所屬VTEP的MAC位址,目的MAC位址(Dst. MAC Addr.)為到達目的VTEP的路徑上下一跳裝置的MAC位址。
本章中,我們介紹了VXLAN的概念、VXLAN網絡模型及VXLAN封包的封裝格式,了解了VXLAN技術是如何見招拆招解決雲計算時代虛拟化中的一系列問題的。看到這裡,相信你對于VXLAN已經有了初步的了解。
有了以上的理論基礎,想必你一定迫不及待的想進一步了解VXLAN的控制面及轉發面的工作原理,比如:
l VTEP如何确定跟誰建立VXLAN隧道?
l VXLAN隧道怎麼建立起來的?
l 原始封包如何知道要進入哪條隧道呢?
l VTEP是如何對封包進行封裝的呢?
下面我們就以CE系列交換機的實作為例,逐一解答你的疑惑。
圖3-1 建立VXLAN隧道示意圖(1)
如圖3-1所示,網絡中存在多個VTEP,那麼這其中哪些VTEP間需要建立VXLAN隧道呢?
例如,假設圖3-1中VTEP_1連接配接的VM、VTEP_2連接配接的VM以及VTEP_3連接配接的VM之間需要“大二層”互通,那VTEP_1、VTEP_2和VTEP_3之間就需要兩兩建立VXLAN隧道,如圖3-2所示。
圖3-2 建立VXLAN隧道示意圖(2)
前面提到的“同一大二層域”,就類似于傳統網絡中VLAN(虛拟區域網路)的概念,隻不過在VXLAN網絡中,它有另外一個名字,叫做Bridge-Domain,簡稱BD。
我們知道,不同的VLAN是通過VLAN ID來進行區分的,那不同的BD是如何進行區分的呢?其實前面已經提到了,就是通過VNI來區分的。對于CE系列交換機而言,BD與VNI是1:1的映射關系,這種映射關系是通過在VTEP上配置指令行建立起來的。配置如下:
#
bridge-domain 10 //表示建立一個“大二層廣播域”BD,其編号為10
vxlan vni 5000 //表示在BD 10下,指定與之關聯的VNI為5000
VTEP會根據以上配置生成BD與VNI的映射關系表,該映射表可以通過指令行檢視,如下所示:
<HUAWEI> display vxlan vni
Number of vxlan vni : 1
VNI BD-ID State
----------------------------------
5000 10 up
有了映射表後,進入VTEP的封包就可以根據自己所屬的BD來确定封包封裝時該添加哪個VNI。那麼,封包根據什麼來确定自己屬于哪個BD呢?
這裡要先澄清下,VTEP隻是交換機承擔的一個角色而已,隻是交換機功能的一部分。也就是說,并非所有進入到交換機的封包都會走VXLAN隧道(也可能封包就是走普通的二三層轉發流程)。是以,我們在回答“如何确定封包屬于哪個BD”之前,必須先要回答“哪些封包要進入VXLAN隧道”。
回答這個問題之前,不妨先讓我們想下VLAN技術中,交換機對于接收和發送的封包是如何進行處理的。我們知道,封包要進入交換機進行下一步處理,首先得先過接口這一關,可以說接口掌控着對封包的“生殺大權”。傳統網絡中定義了三種不同類型的接口:Access、Trunk、Hybrid。這三種類型的接口雖然應用場景不同,但他們的最終目的是一樣的:一是根據配置來檢查哪些封包是允許通過的;二是判斷對檢查通過的封包做怎樣的處理。
其實在VXLAN網絡中,VTEP上的接口也承擔着類似的任務,隻不過在CE系列交換機中,這裡的接口不是實體接口,而是一個叫做“二層子接口”的邏輯接口。類似的,二層子接口主要做兩件事:一是根據配置來檢查哪些封包需要進入VXLAN隧道;二是判斷對檢查通過的封包做怎樣的處理。下面我們就來看下,二層子接口是如何完成這兩件事的。
在二層子接口上,可以根據需要定義不同的流封裝類型(類似于傳統網絡中不同的接口類型)。CE系列交換機目前支援三種不同的流封裝類型,分别是dot1q、untag和default,它們各自對封包的處理方式如表3-1所示。有了這張表,你就能明白哪些封包要進VXLAN隧道了。
表3-1 不同流封裝類型的接口對封包的處理方式
流封裝類型
允許進入VXLAN隧道的封包類型
封包進行封裝前的處理
收到VXLAN封包并解封裝後的處理
dot1q
隻允許攜帶指定VLAN Tag的封包進入VXLAN隧道。
(這裡的“指定VLAN Tag”是通過指令進行配置的)
進行VXLAN封裝前,先剝掉原始封包的VLAN Tag。
進行VXLAN解封裝後:
若内層原始封包帶有VLAN Tag,則先将該VLAN Tag替換為指定的VLAN Tag,再轉發;
若内層原始封包不帶VLAN Tag,則先将其添加指定的VLAN Tag,再轉發。
untag
隻允許不攜帶VLAN Tag的封包進入VXLAN隧道。
進行VXLAN封裝前,不對原始封包做處理,即不添加任何VLAN Tag。
若内層原始封包帶有VLAN Tag,則先将該VLAN Tag剝掉,再轉發;
若内層原始封包不帶VLAN Tag,則直接轉發。
default
允許所有封包進入VXLAN隧道,不論封包是否攜帶VLAN Tag。
進行VXLAN封裝前,不對原始封包做處理,即不添加/不替換/不剝掉任何VLAN Tag。
進行VXLAN解封裝後,不對原始封包做處理,即不添加/不替換/不剝掉任何VLAN Tag。
VXLAN隧道兩端二層子接口的配置并不一定是完全對等的。正因為這樣,才可能實作屬于同一網段但是不同VLAN的兩個VM通過VXLAN隧道進行通信。
看了上面的描述,再來回答“如何确定封包屬于哪個BD”就非常簡單了。其實,隻要将二層子接口加入指定的BD,然後根據二層子接口上的配置,就可以确定封包屬于哪個BD啦!
比如圖3-3所示的組網,我們可以分别在VTEP的兩個實體接口10GE 1/0/1和10GE 1/0/2上配置不同流封裝類型的二層子接口并将其分别加入不同的BD。
圖3-3 二層子接口加入BD
基于二層實體接口10GE 1/0/1,分别建立二層子接口10GE 1/0/1.1和10GE 1/0/1.2,且分别配置其流封裝類型為dot1q和untag。配置如下:
interface 10GE1/0/1.1 mode l2 //建立二層子接口10GE1/0/1.1
encapsulation dot1q vid 10 //隻允許攜帶VLAN Tag 10的封包進入VXLAN隧道
bridge-domain 10 //封包進入的是BD 10
interface 10GE1/0/1.2 mode l2 //建立二層子接口10GE1/0/1.2
encapsulation untag //隻允許不攜帶VLAN Tag的封包進入VXLAN隧道
bridge-domain 20 //封包進入的是BD 20
基于二層實體接口10GE 1/0/2,建立二層子接口10GE 1/0/2.1,且流封裝類型為default。配置如下:
interface 10GE1/0/2.1 mode l2 //建立二層子接口10GE1/0/2.1
encapsulation default //允許所有封包進入VXLAN隧道
bridge-domain 30 //封包進入的是BD 30
此時你可能會有這樣的疑問,為什麼要在10GE 1/0/1上建立兩個不同類型的子接口?是否還可以繼續在10GE 1/0/1上建立一個default類型的二層子接口?換句話說,使用者應該如何選擇配置哪種類型的二層子接口?三種類型的二層子接口之間,是否存在配置限制關系?
我們先來解答下是否可以在10GE 1/0/1上再建立一個default類型的二層子接口。答案是不可以。其實根據表3-1的描述,這一點很容易了解。因為default類型的二層子接口允許所有封包進入VXLAN隧道,而dot1q和untag類型的二層子接口隻允許某一類封包進入VXLAN隧道。這就決定了,default類型的二層子接口跟其他兩種類型的二層子接口是不可以在同一實體接口上共存的。否則,封包到了接口之後如何判斷要進入哪個二層子接口呢。是以,default類型的子接口,一般應用在經過此接口的封包均需要走同一條VXLAN隧道的場景,即下挂的VM全部屬于同一BD。例如,圖3-3中VM3和VM4均屬于BD 30,則10GE 1/0/2上就可以建立default類型的二層子接口。
再來看下為什麼可以在10GE 1/0/1上分别建立dot1q和untag類型的二層子接口。如圖3-3所示,VM1和VM2分别屬于VLAN 10和VLAN 20,且分别屬于不同的大二層域BD 10和BD 20,顯然他們發出的封包要進入不同的VXLAN隧道。如果VM1和VM2發出的封包在到達VTEP的10GE 1/0/1接口時,一個是攜帶VLAN 10的Tag的,一個是不攜帶VLAN Tag的(比如二層交換機上行連接配接VTEP的接口上配置的接口類型是Trunk,允許通過的VLAN為10和20,PVID為VLAN 20),則為了區分兩種封包,就必須要在10GE 1/0/1上分别建立dot1q和untag類型的二層子接口。是以,當經過同一實體接口的封包既有帶VLAN Tag的,又有不帶VLAN Tag的,并且他們各自要進入不同的VXLAN隧道,則可以在該實體接口上同時建立dot1q和untag類型的二層子接口。
當然,現網中可能存在各種不同的組網,小編也不可能一一列舉出來。是以在實際應用中,請務必根據組網需求,結合表3-1,合理規劃二層子接口的流封裝類型。
現在,我們可以來看下VXLAN隧道是怎麼建立起來的了。
一般而言,隧道的建立不外乎手工方式和自動方式兩種。
l 手工方式
這種方式需要使用者手動指定VXLAN隧道的源和目的IP位址分别為本端和對端VTEP的IP位址,也就是人為的在本端VTEP和對端VTEP之間建立靜态VXLAN隧道。
對于CE系列交換機,以上配置是在NVE(Network Virtualization Edge)接口下完成的。配置過程如下:
interface Nve1 //建立邏輯接口NVE 1
source 1.1.1.1 //配置源VTEP的IP位址(推薦使用Loopback接口的IP位址)
vni 5000 head-end peer-list 2.2.2.2
vni 5000 head-end peer-list 2.2.2.3
其中,vni 5000 head-end peer-list 2.2.2.2和vni 5000 head-end peer-list 2.2.2.3的配置,表示屬于VNI 5000的對端VTEP有兩個,IP位址分别為2.2.2.2和2.2.2.3。根據這兩條配置,VTEP上會生成如下所示的一張表:
<HUAWEI> display vxlan vni 5000 verbose
BD ID : 10
State : up
NVE : 288
Source : 1.1.1.1
UDP Port : 4789
BUM Mode : head-end
Group Address : -
Peer List : 2.2.2.2 2.2.2.3
根據上表中的Peer List,本端VTEP就可以知道屬于同一BD(或同一VNI)的對端VTEP都有哪些,這也就決定了同一大二層廣播域的範圍。當VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,廣播&未知單點傳播&多點傳播)封包時,會将封包複制并發送給Peer List中所列的所有對端VTEP(這就好比廣播封包在VLAN内廣播)。是以,這張表也被稱為“頭端複制清單”。當VTEP收到已知單點傳播封包時,會根據VTEP上的MAC表來确定封包要從哪條VXLAN隧道走。而此時Peer List中所列的對端,則充當了MAC表中“出接口”的角色。在後面的封包轉發流程中,你将會看到頭端複制清單是如何在VXLAN網絡中指導封包進行轉發的。
l 自動方式
自動方式下VXLAN隧道的建立需要借助于其他的協定,例如BGP。CE系列交換機中,自動方式建立VXLAN隧道主要應用在EVN(Ethernet Virtual Network)和VXLAN的分布式網關場景中。本文不對該方式進行詳細講述,具體實作可參考EVN的相關資料。
從前面的描述我們知道,屬于同一BD的VXLAN隧道可能不止一條,比如前面的頭端複制清單中,同一個源端VTEP(1.1.1.1)對應了兩個對端VTEP(2.2.2.2和2.2.2.3)。那就帶來了另一個問題,封包到底應該走哪一條隧道呢?
我們知道,基本的二三層轉發中,二層轉發依賴的是MAC表,如果沒有對應的MAC表,則主機發送ARP廣播封包請求對端的MAC位址;三層轉發依賴的是FIB表。在VXLAN中,其實也是同樣的道理。下面就讓我們來看下,VXLAN網絡中封包的轉發流程。相信看完下面的内容,關于“如何确定封包要進哪條隧道”的疑惑也就迎刃而解了。
圖3-4 同子網VM互通組網圖
如圖3-4所示,VM_A、VM_B和VM_C同屬于10.1.1.0/24網段,且同屬于VNI 5000。此時,VM_A想與VM_C進行通信。
由于是首次進行通信,VM_A上沒有VM_C的MAC位址,是以會發送ARP廣播封包請求VM_C的MAC位址。
下面就讓我們根據ARP請求封包及ARP應答封包的轉發流程,來看下MAC位址是如何進行學習的。
l ARP請求封包轉發流程
圖3-5 ARP請求封包轉發流程
如圖3-5所示,ARP請求封包的轉發流程如下:
VM_A發送源MAC為MAC_A、目的MAC為全F、源IP為IP_A、目的IP為IP_C的ARP廣播封包,請求VM_C的MAC位址。
VTEP_1收到ARP請求後,根據二層子接口上的配置判斷封包需要進入VXLAN隧道。确定了封包所屬BD後,也就确定了封包所屬的VNI。同時,VTEP_1學習MAC_A、VNI和封包入接口(Port_1,即二層子接口對應的實體接口)的對應關系,并記錄在本地MAC表中。之後,VTEP_1會根據頭端複制清單對封包進行複制,并分别進行封裝。
可以看到,這裡封裝的外層源IP位址為本地VTEP(VTEP_1)的IP位址,外層目的IP位址為對端VTEP(VTEP_2和VTEP_3)的IP位址;外層源MAC位址為本地VTEP的MAC位址,而外層目的MAC位址為去往目的IP的網絡中下一跳裝置的MAC位址。
封裝後的封包,根據外層MAC和IP資訊,在IP網絡中進行傳輸,直至到達對端VTEP。
封包到達VTEP_2和VTEP_3後,VTEP對封包進行解封裝,得到VM_A發送的原始封包。同時,VTEP_2和VTEP_3學習VM_A的MAC位址、VNI和遠端VTEP的IP位址(IP_1)的對應關系,并記錄在本地MAC表中。之後,VTEP_2和VTEP_3根據二層子接口上的配置對封包進行相應的處理并在對應的二層域内廣播。
VM_B和VM_C接收到ARP請求後,比較封包中的目的IP位址是否為本機的IP位址。VM_B發現目的IP不是本機IP,故将封包丢棄;VM_C發現目的IP是本機IP,則對ARP請求做出應答。下面,讓我們看下ARP應答封包是如何進行轉發的。
l ARP應答封包轉發流程
圖3-6 ARP應答封包轉發流程
如圖3-6所示,ARP應答封包的轉發流程如下:
由于此時VM_C上已經學習到了VM_A的MAC位址,是以ARP應答封包為單點傳播封包。封包源MAC為MAC_C,目的MAC為MAC_A,源IP為IP_C、目的IP為IP_A。
VTEP_3接收到VM_C發送的ARP應答封包後,識别封包所屬的VNI(識别過程與步驟2類似)。同時,VTEP_3學習MAC_C、VNI和封包入接口(Port_3)的對應關系,并記錄在本地MAC表中。之後,VTEP_3對封包進行封裝。
可以看到,這裡封裝的外層源IP位址為本地VTEP(VTEP_3)的IP位址,外層目的IP位址為對端VTEP(VTEP_1)的IP位址;外層源MAC位址為本地VTEP的MAC位址,而外層目的MAC位址為去往目的IP的網絡中下一跳裝置的MAC位址。
封包到達VTEP_1後,VTEP_1對封包進行解封裝,得到VM_C發送的原始封包。同時,VTEP_1學習VM_C的MAC位址、VNI和遠端VTEP的IP位址(IP_3)的對應關系,并記錄在本地MAC表中。之後,VTEP_1将解封裝後的封包發送給VM_A。
至此,VM_A和VM_C均已學習到了對方的MAC位址。之後,VM_A和VM_C将采用單點傳播方式進行通信。單點傳播封包的封裝與解封裝過程,與圖3-6中所展示的類似,本文就不再贅述啦!
圖3-7 不同子網VM互通組網圖
如圖3-7所示,VM_A和VM_B分别屬于10.1.10.0/24網段和10.1.20.0/24網段,且分别屬于VNI 5000和VNI 6000。VM_A和VM_B對應的三層網關分别是VTEP_3上BDIF 10和BDIF 20的IP位址。VTEP_3上存在到10.1.10.0/24網段和10.1.20.0/24網段的路由。此時,VM_A想與VM_B進行通信。
BDIF接口的功能與VLANIF接口類似,是基于BD建立的三層邏輯接口,用以實作不同子網VM之間或VXLAN網絡與非VXLAN網絡之間的通信。
由于是首次進行通信,且VM_A和VM_B處于不同網段,VM_A需要先發送ARP廣播封包請求網關(BDIF 10)的MAC,獲得網關的MAC後,VM_A先将資料封包發送給網關;之後網關也将發送ARP廣播封包請求VM_B的MAC,獲得VM_B的MAC後,網關再将資料封包發送給VM_B。以上MAC位址學習的過程與同子網互通中MAC位址學習的流程一緻,不再贅述。現在假設VM_A和VM_B均已學到網關的MAC、網關也已經學到VM_A和VM_B的MAC,下面就讓我們看下資料封包是如何從VM_A發送到VM_B的。
圖3-8 不同子網VM互通封包轉發流程
如圖3-8所示,資料封包從VM_A發送到VM_B的流程如下:
VM_A先将資料封包發送給網關。封包的源MAC為MAC_A,目的MAC為網關BDIF 10的MAC_10,源IP位址為IP_A,目的IP為IP_B。
VTEP_1收到資料封包後,識别此封包所屬的VNI(VNI 5000),并根據MAC表項對封包進行封裝。可以看到,這裡封裝的外層源IP位址為本地VTEP的IP位址(IP_1),外層目的IP位址為對端VTEP的IP位址(IP_3);外層源MAC位址為本地VTEP的MAC位址(MAC_1),而外層目的MAC位址為去往目的IP的網絡中下一跳裝置的MAC位址。
封包進入VTEP_3,VTEP_3對封包進行解封裝,得到VM_A發送的原始封包。然後,VTEP_3會對封包做如下處理:
l VTEP_3發現該封包的目的MAC為本機BDIF 10接口的MAC,而目的IP位址為IP_B(10.1.20.1),是以會根據路由表查找到IP_B的下一跳。
l 發現下一跳為10.1.20.10,出接口為BDIF 20。此時VTEP_3查詢ARP表項,并将原始封包的源MAC修改為BDIF 20接口的MAC(MAC_20),将目的MAC修改為VM_B的MAC(MAC_B)。
l 封包到BDIF 20接口時,識别到需要進入VXLAN隧道(VNI 6000),是以根據MAC表對封包進行封裝。這裡封裝的外層源IP位址為本地VTEP的IP位址(IP_3),外層目的IP位址為對端VTEP的IP位址(IP_2);外層源MAC位址為本地VTEP的MAC位址(MAC_3),而外層目的MAC位址為去往目的IP的網絡中下一跳裝置的MAC位址。
封包到達VTEP_2後,VTEP_2對封包進行解封裝,得到内層的資料封包,并将其發送給VM_B。
VM_B回應VM_A的流程與上述過程類似,本文就不再贅述啦!
VXLAN網絡與非VXLAN網絡之間的互通,也需要借助于三層網關。其實作與圖3-8的不同點在于封包在VXLAN網絡側會進行封裝,而在非VXLAN網絡側不需要進行封裝。封包從VXLAN側進入網關并解封裝後,就按照普通的單點傳播封包發送方式進行轉發
本章主要介紹了VXLAN控制面表項的建立過程及VXLAN網絡中封包的轉發過程。看到這裡,
相信你對于VXLAN已經達到熟悉的階段了。有了上面的理論基礎,接下來,我們可以來了解下VXLAN在現網中是如何部署的了。
本篇我們以下圖所示的典型的“Spine-Leaf”資料中心組網為例,給大家介紹一下CE系列交換機VXLAN的應用場景和部署方案。
在上圖所示的資料中心裡,企業使用者擁有多個部門(部門1和部門2),每個部門中擁有多個VM(VM1和VM3,VM2和VM4)。同部門的VM屬于同一個網段,不同部門的VM屬于不同的網段。使用者希望同一部門VM之間、不同部門VM之間,VM與Internet之間均可互相通路。
部署方案
如圖4-1所示,Leaf1和Leaf2作為VXLAN網絡的VTEP,兩個Leaf之間搭建VXLAN隧道,并在每個Leaf上部署VXLAN二層網關,即可實作同一部門VM之間的互相通信。此時Spine隻作為VXLAN封包的轉發節點,不感覺VXLAN隧道的存在,可以是任意的三層網絡裝置。
圖4-1 相同子網互通
如圖4-2所示,Leaf1、Leaf2和Spine作為VXLAN網絡的VTEP,Leaf1和Spine之間、Leaf2和Spine之間分别搭建VXLAN隧道,并在Spine上部署VXLAN三層網關,即可實作不同部門VM之間的互相通信。
圖4-2 不同子網互通(集中式網關)
出現背景
細心的讀者可能已經發現,在不同子網互通(集中式網關)中,同一Leaf(Leaf1)下挂的不同網段VM(VM1和VM2)之間的通信,都需要在Spine上進行繞行,這樣就導緻Leaf與Spine之間的鍊路上,存在備援的封包,額外占用了大量的帶寬。同時,Spine作為VXLAN三層網關時,所有通過三層轉發的終端租戶的表項都需要在該裝置上生成。但是,Spine的表項規格有限,當終端租戶的數量越來越多時,容易成為網絡瓶頸。
分布式網關的出現,很好的解決了這兩個問題。
l 同Leaf節點下不同部門VM之間的通信
如圖4-3所示,Leaf1作為VXLAN網絡的VTEP,在Leaf1上部署VXLAN三層網關,即可實作同Leaf下不同部門VM之間的互相通信。此時,VM1和VM2互訪時,流量隻需要在Leaf1節點進行轉發,不再需要經過Spine節點,進而節約了大量的帶寬資源。
l 跨Leaf節點不同部門VM之間的通信
如圖4-3所示,Leaf1和Leaf2作為VXLAN網絡的VTEP,在Leaf1和Leaf2上部署VXLAN三層網關。兩個VXLAN三層網關之間通過BGP動态建立VXLAN隧道,并通過BGP的remote-nexthop屬性釋出本網關下挂的主機路由資訊給其他BGP鄰居,進而實作跨Leaf節點不同部門VM之間的互相通信。
圖4-3 不同子網互通(分布式網關)
Leaf作為VXLAN三層網關時,隻學習其下挂終端租戶的表項,而不必像集中式三層網關一樣,需要學習網絡中所有終端租戶的表項,進而解決了集中式三層網關帶來表項瓶頸問題。
随着網絡的快速普及和應用的日益深入,基礎網絡的可靠性日益成為使用者關注的焦點,如何能夠保證網絡傳輸不中斷對于終端使用者而言非常重要。
在VXLAN網絡的子網互通中,VM與Leaf之間,Leaf與Spine之間都是通過單歸方式接入的。這種組網接入方式,顯然已經不能滿足使用者對VXLAN網絡可靠性的需求。
這時,可以按照如下圖所示方式,提升VXLAN網絡的可靠性。
通常采用堆疊(CSS)方式提升接入層的可靠性。這是因為,接入層的裝置數量繁多,堆疊方式可以将多台交換機裝置組合在一起,虛拟化成一台交換裝置,所有配置均在這一台虛拟交換機上進行,進而簡化了接入層裝置的運維複雜度。此外,堆疊系統内成員交換機之間在進行備援備份的同時,能夠利用跨裝置的Eth-Trunk實作裝置間鍊路的負載分擔。
圖4-4 接入層的可靠性
l 當CSS系統正常時,VM1與VM3之間互訪的流量,通過CSS-1堆疊系統中的Leaf1和Leaf2進行負載分擔轉發。
l 當CSS系統故障時(Leaf1故障),VM1與VM3之間互訪的流量,全部切換到CSS-1堆疊系統中的Leaf2進行轉發,進而實作了流量的不間斷,提升了接入層的可靠性。
通常采用多活網關方式提升核心層的可靠性。這是因為,核心層裝置實體位置較為分散,傳統的裝置級備份無法滿足要求,必須通過協定級備份來實作。
在多活網關組網中,通過給多台Spine裝置部署相同的網關資訊,将它們對外模拟成VXLAN網絡中的一個虛拟VTEP,然後在所有Spine裝置上配置三層網關,使得無論流量發到哪一個Spine,該裝置都可以提供服務,将封包正确轉發給下一跳裝置。此外,多活網關中的多台Spine之間形成負載分擔關系,共同進行流量轉發。
圖4-5 核心層的可靠性
如圖4-5所示,Spine1、Spine2分别與接入層的堆疊系統CSS-1和CSS-2之間建立VXLAN隧道,在Spine1、Spine2上配置VXLAN三層網關功能,Spine1、Spine2上部署相同的網關MAC位址、網關IP位址以及源VTEP位址,以便對外模拟成一個虛拟的VTEP,進而實作了不同網段VM之間、VM與外網之間的互通。
l 當多活網關系統正常時,VM1與VM4之間互訪的流量、VM1與Internet之間互訪的流量,通過Spine1和Spine2進行負載分擔轉發。
l 當多活網關系統故障時(Spine1故障),VM1與VM4之間互訪的流量、VM1與Internet之間互訪的流量,全部切換到Spine2進行轉發,進而實作了流量的不間斷,提升了核心層的可靠性。
CE系列交換機支援通過單機方式和控制器方式來部署VXLAN網絡。這兩種方式中VXLAN網絡的子網互通以及VXLAN網絡的可靠性的實作均與前面一緻,不同點在于VXLAN的配置下發方式不同:單機方式是通過CLI手動在裝置上進行配置,控制器方式是通過控制器向裝置下發配置或流表,裝置僅作為轉發器。
下面小編以圖4-6所示組網為例,簡單介紹一下目前CE系列交換機支援的VXLAN控制器部署方式:SNC控制器方式和AC控制器方式。
圖4-6 控制器部署方案
l SNC控制器方式
SNC控制器方式是指通過SNC控制器動态建立VXLAN隧道。
此方式下,CE系列交換機作為轉發器,無需進行VXLAN配置。VXLAN隧道的建立以及指導封包轉發的表項,均由SNC控制器通過OpenFlow協定向轉發器下發。
l AC控制器方式
AC控制器方式是指通過AC控制器動态建立VXLAN隧道。
此方式下,CE系列交換機作為轉發器,需要預先完成部分基礎配置(具體配置内容請參考産品配置指南),AC控制器通過NETCONF協定向轉發器下發建立VXLAN隧道的配置,通過OpenFlow協定控制封包在隧道中的轉發。
本篇内容,我們通過介紹VXLAN出現的時代背景、VXLAN的概念及網絡模型、VXLAN封包的封裝格式,讓你對VXLAN有了初步的了解;通過介紹VXLAN隧道的建立及封包的轉發流程,讓你熟悉了VXLAN的控制面及轉發面的工作機制;通過介紹CE系列交換機VXLAN的應用場景和部署方案,讓你進一步了解VXLAN技術在現網中是如何運用的。
總之,VXLAN通過MAC-in-UDP的封包封裝,實作了二層封包在三層網絡上的透傳,在雲端上架起了一道道無形的“彩虹”,解決了雲計算中虛拟化帶來的一系列問題。
本文轉自 meiyanaa 51CTO部落格,原文連結:http://blog.51cto.com/justim/1745351,如需轉載請自行聯系原作者