王飛
摘要:近年來,隨著數(shù)據(jù)中心的不斷發(fā)展,實現(xiàn)了數(shù)據(jù)中心計算和存儲資源的虛擬化和按需分配,但網(wǎng)絡(luò)虛擬化一直受各種因素的限制,SDN技術(shù)的出現(xiàn),為有效整合現(xiàn)有數(shù)據(jù)中心網(wǎng)絡(luò)資源提供很好的解決方式。本文通過軟件仿真,對數(shù)據(jù)中心VXLAN的構(gòu)建、openflow流表的下發(fā)機(jī)制進(jìn)行實驗和驗證,實現(xiàn)了SDN網(wǎng)絡(luò)集中規(guī)劃管理、控制面和數(shù)據(jù)面分離、網(wǎng)絡(luò)軟件化和網(wǎng)絡(luò)可編程等特性,為省級數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)升級轉(zhuǎn)型提供實踐經(jīng)驗。
如今,數(shù)據(jù)中心計算和存儲資源的虛擬化和按需分配,已基本滿足各種軟硬件資源池化和信息系統(tǒng)整合重構(gòu)的要求,充分保障業(yè)務(wù)系統(tǒng)的連續(xù)性。但隨著數(shù)據(jù)中心的不斷發(fā)展壯大,網(wǎng)絡(luò)資源的有效整合利用一直被各種因素制約和限制,值得關(guān)注。
一、數(shù)據(jù)中心網(wǎng)絡(luò)資源利用存在的問題
(一)虛擬化環(huán)境下網(wǎng)絡(luò)配置的復(fù)雜度極大提升
隨著數(shù)據(jù)中心計算及存儲資源不斷虛擬化,形成多個虛擬網(wǎng)絡(luò)共享底層物理網(wǎng)絡(luò)資源的情況;一方面物理層的故障將會影響虛擬網(wǎng)絡(luò)的可用性,導(dǎo)致網(wǎng)絡(luò)服務(wù)中斷;另一方面不同業(yè)務(wù)系統(tǒng)間虛擬網(wǎng)絡(luò)的增加,安全策略的不同,也進(jìn)一步增加了網(wǎng)絡(luò)配置的復(fù)雜度,導(dǎo)致網(wǎng)絡(luò)運維極其困難。
(二)虛擬化環(huán)境下大二層網(wǎng)絡(luò)不斷膨脹
在虛擬化環(huán)境下,網(wǎng)絡(luò)虛擬機(jī)通過bridge方式接入,使得大二層網(wǎng)絡(luò)節(jié)點不斷增加;同時,為了實現(xiàn)虛擬機(jī)在不同物理服務(wù)器的自由遷移,將使得VLAN無法隔離廣播域、大二層網(wǎng)絡(luò)的不斷膨脹。以上兩種情況,導(dǎo)致整個數(shù)據(jù)中心被分割成相互獨立的多個業(yè)務(wù)網(wǎng)絡(luò),極大限制了虛擬機(jī)遷移的范圍和用戶網(wǎng)絡(luò)的擴(kuò)展性;同時不斷的網(wǎng)絡(luò)冗余將帶來廣播包過多、交換機(jī)轉(zhuǎn)發(fā)表溢出、生成樹算法導(dǎo)致帶寬利用率低等問題。
(三)多租戶網(wǎng)絡(luò)隔離難以很好的實現(xiàn)
在目前云計算環(huán)境下,由于各業(yè)務(wù)系統(tǒng)共用一套核心交換機(jī)、路由器、防火墻等設(shè)備,數(shù)據(jù)中心存在大二層互通的需求, 為了讓大二層可以連通且區(qū)分不同租戶,通常采用VLAN技術(shù),其4k的理論數(shù)值遠(yuǎn)不能滿足當(dāng)前用戶的需求。同時,在傳統(tǒng)網(wǎng)絡(luò)基礎(chǔ)上,很難既滿足云數(shù)據(jù)中心對IP地址、VLAN、安全等網(wǎng)絡(luò)策略統(tǒng)一規(guī)劃,又實現(xiàn)各系統(tǒng)間的有效隔離,并支持其個性化要求。
二、SDN技術(shù)與網(wǎng)絡(luò)虛擬化
SDN(Software Defined Network)軟件定義網(wǎng)絡(luò),是網(wǎng)絡(luò)虛擬化的一種實現(xiàn)方式。SDN技術(shù)的核心技術(shù)OpenFlow通過將網(wǎng)絡(luò)設(shè)備的控制面與數(shù)據(jù)面分離,從而實現(xiàn)集中管控和開放可編程,可實現(xiàn)靈活、快速、高效網(wǎng)絡(luò)配置。
網(wǎng)絡(luò)虛擬化則是云計算和SDN發(fā)展到一定階段的產(chǎn)物。網(wǎng)絡(luò)虛擬化簡單來講是指把邏輯網(wǎng)絡(luò)從底層的物理網(wǎng)絡(luò)分離開來。當(dāng)前,網(wǎng)絡(luò)虛擬化主要基于Overlay技術(shù)實現(xiàn),Overlay是一種將(業(yè)務(wù)的)二層網(wǎng)絡(luò)構(gòu)架在(傳統(tǒng)網(wǎng)絡(luò)的)三層/四層報文中進(jìn)行傳遞的網(wǎng)絡(luò)技術(shù)。該技術(shù)實際上是一種隧道封裝技術(shù),主要有VXLAN、NVGRE、STT這三種技術(shù)。VXLAN是目前主流的Overlay技術(shù),將二層報文封裝到udp報文中,擴(kuò)大二層網(wǎng)絡(luò)的范圍,將不同數(shù)據(jù)中心置于同一個大二層網(wǎng)絡(luò),滿足多數(shù)據(jù)中心虛擬機(jī)遷移和多租戶隔離的需求。
SDN集中控制管理的方式,非常適合用于管理VXLAN多租戶、跨域的虛擬網(wǎng)絡(luò)。本文通過實驗,模擬利用SDN控制器實現(xiàn)對整個網(wǎng)絡(luò)的統(tǒng)一管理、規(guī)劃和控制,理解SDN控制平面和轉(zhuǎn)發(fā)平面分離的模式與openflow協(xié)議,檢驗網(wǎng)絡(luò)軟件化和網(wǎng)絡(luò)可編程化,進(jìn)一步掌握SDN的openflow和VXLAN技術(shù)原理,為省級數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)升級轉(zhuǎn)型提供實踐經(jīng)驗。
三、基于SDN架構(gòu)的VXLAN網(wǎng)絡(luò)實驗探索
本文采用虛擬環(huán)境模擬兩個數(shù)據(jù)中心(DC)和SDN控制器,實現(xiàn)兩個數(shù)據(jù)中心之間VXLAN隧道的建立,不同數(shù)據(jù)中心同一租戶主機(jī)通過VXLAN實現(xiàn)基于三層網(wǎng)絡(luò)的二層連接,并隔離不同的租戶;通過SDN控制器下發(fā)網(wǎng)絡(luò)的VXLAN配置和open vswitch(ovs)的openflow流表,利用流表項控制數(shù)據(jù)的轉(zhuǎn)發(fā)。
(一)總體規(guī)劃
實驗采用三臺虛擬機(jī),兩臺模擬數(shù)據(jù)中心(dc1、dc2),使用mininet構(gòu)建網(wǎng)絡(luò)拓?fù)洌總€dc包括一臺ovs交換機(jī)和兩臺主機(jī),兩臺主機(jī)分屬不同的租戶;第三臺虛擬機(jī)安裝OpenDaylight(odl)做為SDN控制器。三臺虛擬機(jī)分別安裝于不同的物理機(jī),為模擬真實的網(wǎng)絡(luò)環(huán)境,通過路由器實現(xiàn)虛擬機(jī)之間三層網(wǎng)絡(luò)連通。
(二)實現(xiàn)步驟
1.構(gòu)建網(wǎng)絡(luò)拓?fù)洹尤_虛擬機(jī),測試虛擬機(jī)之間的網(wǎng)絡(luò)連通性,三臺虛擬機(jī)分屬不同的網(wǎng)段,通過路由器實現(xiàn)三層互聯(lián),拓?fù)洳捎肞ython代碼預(yù)先定義,通過Mininet調(diào)用來構(gòu)建。數(shù)據(jù)中心一(dc1)的拓?fù)涠x文件(dc1.py)主要配置內(nèi)容如下:
#添加主機(jī)和交換機(jī)
leftHost=self.addHost('hosta1',ip="192.168.200.1/24",mac="00:00:00:00:aa:01")
rightHost=self.addHost('hostb1',ip="192.168.200.3/24",mac="00:00:00:00:bb:01")
leftSwitch = self.addSwitch( 's1' )
# 增加連接
self.addLink( leftHost, leftSwitch )
self.addLink( rightHost, leftSwitch )
#在dc1虛擬機(jī)操作系統(tǒng)命令行輸入以下命令:
sudo mn --custom dc1.py --topo mytopo
--controller=remote,ip=10.160.141.35,protocols=OpenFlow13
dc1的網(wǎng)絡(luò)拓?fù)錁?gòu)建完成后,按同樣方法構(gòu)建dc2網(wǎng)絡(luò),dc2.py的對應(yīng)參數(shù)根據(jù)網(wǎng)絡(luò)地址規(guī)劃做相應(yīng)調(diào)整。
啟動控制器,安裝必要的組件(feature):
$> feature:install odl-l2switch-all odl-restconf-all odl-nsf-all odl-mdsal-apidocs
$> feature:install odl-ovsdb-southbound-impl odl-ovsdb-southbound-impl-rest odl-openflowplugin-all-li
將ovs openflow版本設(shè)為1.3并將交換機(jī)設(shè)為被動監(jiān)聽控制器模式,在dc1和dc2上mininet提示符下執(zhí)行:
mininet> sh ovs-vsctl set bridge s1 protocols=OpenFlow13
mininet> sh ovs-vsctl set-manager ptcp:6640
2.配置VXLAN隧道。采用SDN集中控制的理念,利用odl的restconf南向API接口,通過控制器ovsdb模塊實現(xiàn)VXLAN的配置,配置命令如下:
#將vswitch注冊到odl:
http請求方法:PUT;
URL:http://10.160.141.35:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1
#請求body json使用ODL的YANG UI構(gòu)造,主要參數(shù):
"topology-id": "ovsdb:1",
"node-id": "mininet1",
"remote-ip": "192.168.101.1",
"remote-port": "6640"
#創(chuàng)建VXLan隧道:
http請求方法:PUT;
URL:http://10.160.141.35:8181/restconf/config/network-topology:network-topology/topology/ovsdb:1/node/mininet1%2Fbridge%2Fs1/termination-point/vxlanport
#請求body json使用ODL的YANG UI構(gòu)造,主要參數(shù):
"tp-id": "vxlanport",
"ovsdb:name": "vxlanport",
"ovsdb:interface-type": "ovsdb:interface-type-vxlan",
"option": "key",
"option": "remote_ip",
"ovsdb:ofport": "10",
"ovsdb:ofport_request": "10"
以上是針對dc1的配置,dc2的配置應(yīng)修改相應(yīng)的參數(shù)值。在mininet命令行執(zhí)行以下命令,檢查vtep是否添加成功:
mininet> sh ovs-vsctl -- --columns=name,ofport list Interface
3.下發(fā)openflow流表。上述步驟完成后,基于三層網(wǎng)絡(luò)的overlay已搭建完成,但此時ovs交換機(jī)中還沒有流表項,需要控制器下發(fā)流表才能完成數(shù)據(jù)的轉(zhuǎn)發(fā)。在下發(fā)流表前進(jìn)行ping測試,實驗中4臺host互不連通。實驗中主要用到流表的匹配字段(match)和指令(instruction)字段,匹配字段類似acl,根據(jù)數(shù)據(jù)包入端口和包頭信息匹配符合條件的數(shù)據(jù)包,并按指令處理、轉(zhuǎn)發(fā)、丟棄、設(shè)置值或轉(zhuǎn)到下一流表。交換機(jī)S1流表項設(shè)計如下:
table=0,in_port=1,actions=set_field:100->tun_id,resubmit(,1)
table=0,in_port=2,actions=set_field:200->tun_id,resubmit(,1)
table=0,actions=resubmit(,1)
table=1,tun_id=100,dl_dst=00:00:00:00:aa:01,actions=output:1
table=1,tun_id=200,dl_dst=00:00:00:00:bb:01,actions=output:2
table=1,tun_id=100,dl_dst=00:00:00:00:aa:02,actions=output:10
table=1,tun_id=200,dl_dst=00:00:00:00:bb:02,actions=output:10
table=1,tun_id=100,arp,nw_dst=192.168.200.1,actions=output:1
table=1,tun_id=200,arp,nw_dst=192.168.200.3,actions=output:2
table=1,tun_id=100,arp,nw_dst=192.168.200.2,actions=output:10
table=1,tun_id=200,arp,nw_dst=192.168.200.4,actions=output:10
table=1,priority=10,actions=drop
流表table0根據(jù)入端口為數(shù)據(jù)包設(shè)置不同的VNI,并跳轉(zhuǎn)到流表table1;流表table1根據(jù)VNI、目的MAC地址決定數(shù)據(jù)包轉(zhuǎn)發(fā)的出端口;對于arp請求,根據(jù)VNI和目的IP地址決定數(shù)據(jù)包轉(zhuǎn)發(fā)的出端口。dc2的交換機(jī)S2流表根據(jù)實際的mac和ip作相應(yīng)調(diào)整。
將以上流表內(nèi)容保存到名為flows的文本文件,可在mininet下用下述命令下發(fā)流表到交換機(jī):
mininet> sh ovs-ofctl add-flows –O openflow13 s1 'flows'
為驗證odl流表下發(fā)功能,我們使用odl的restconf API,通過控制器來完成流表下發(fā),以第一條流表為例:
http請求方法:PUT;
URL:http://10.160.141.35:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1
Json請求body:略
流表需要轉(zhuǎn)換為符合API要求的json請求body,可通過odl的YANG ui界面,輸入流表項參數(shù)后逐條生成,共12條。API調(diào)用可使用多種方法實現(xiàn),如在命令行使用curl命令、使用odl的YANG ui界面、Chrome瀏覽器安裝postman插件、使用編程調(diào)用API等。使用用前三種方法,每次只能下發(fā)一條流表規(guī)則;使用編程調(diào)用API,則可實現(xiàn)批量下發(fā),這也體現(xiàn)了SDN網(wǎng)絡(luò)可編程控制的特點。
在mininet命令行執(zhí)行以下命令,檢查流表是否下發(fā)成功:
Mininet> sh ovs-ofctl dump-flows -O openflow13 s1
4.連通測試。測試dc1與dc2同一租戶主機(jī)網(wǎng)絡(luò)連通性:
mininet> hosta1 ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
64 bytes from 192.168.200.2: icmp_seq=1 ttl=64 time=3.55 ms
mininet> hostb1 ping 192.168.200.4
PING 192.168.200.4 (192.168.200.4) 56(84) bytes of data.
64 bytes from 192.168.200.4: icmp_seq=1 ttl=64 time=3.08 ms
測試不同租戶主機(jī)網(wǎng)絡(luò)連通性:
mininet> hosta1 ping 192.168.200.4
PING 192.168.200.4 (192.168.200.4) 56(84) bytes of data.
From 192.168.200.1 icmp_seq=1 Destination Host Unreachable
mininet> hostb1 ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
From 192.168.200.3 icmp_seq=1 Destination Host Unreachable
主機(jī)則被隔離,達(dá)到了實驗預(yù)期的目標(biāo)。
驗證分析:由于VXLAN是L2 over L4的封裝,以udp報文傳輸,因此僅抓取dc1(192.168.101.1)與dc2(192.168.102.1)之間往來的udp數(shù)據(jù)包,對實驗結(jié)果(如圖2)進(jìn)行驗證和分析。
從192.168.101.1到192.168.102.1的udp數(shù)據(jù)包,目的端口已顯示為VXLAN,將其數(shù)據(jù)載荷部分(data)按VXLAN解碼(如圖3):
data部分被解析為VXLAN數(shù)據(jù)包,VNI值為100,是租戶A兩臺主機(jī)之間的icmp報文。租戶B主機(jī)的報文顯示VNI值為200,源地址為192.168.200.3,目的地址為192.168.200.4(如圖4)。
分析可知,數(shù)據(jù)包進(jìn)入交換機(jī)后,按流表規(guī)則加上VNI,并發(fā)送到vtep;vtep被封裝成udp報文,通過傳統(tǒng)三層網(wǎng)絡(luò)發(fā)送到對端vtep,去除udp報頭后按流表規(guī)則發(fā)送到目的端口。對于同租戶的兩臺主機(jī),雖然位于兩個數(shù)據(jù)中心,但處于同一個虛擬的大二層,其連接是透明的,可以直接互通。
四、小結(jié)
通過模擬省級人民銀行真實網(wǎng)絡(luò)環(huán)境,旨在對相關(guān)原理和技術(shù)有更深入的理解和更直觀的認(rèn)識,為省級數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)升級轉(zhuǎn)型提供實踐經(jīng)驗。
通過實驗,探索了openflow流表的設(shè)計應(yīng)用,加深了對openflow規(guī)范的理解;VXLAN的構(gòu)建、openflow流表的下發(fā)均由控制器完成,從而將控制面和數(shù)據(jù)面分離在不同的設(shè)備中,使OpenFlow 控制器可同時控制多臺OpenFlow交換機(jī)。實踐了SDN網(wǎng)絡(luò)集中規(guī)劃管理、控制面和數(shù)據(jù)轉(zhuǎn)發(fā)面分離、網(wǎng)絡(luò)軟件化和網(wǎng)絡(luò)可編程等特性。下一步將依托實驗結(jié)果,探索雙活技術(shù)的實現(xiàn),將省級數(shù)據(jù)中心主中心雙活的兩臺存儲之一遷移至同城轉(zhuǎn)接中心,將兩數(shù)據(jù)中心系統(tǒng)融合為一個統(tǒng)一的虛擬化集群,實現(xiàn)兩中心應(yīng)用級高可用。
參考文獻(xiàn):
[1] 魏娜,基于SDN和VXLAN相結(jié)合的數(shù)據(jù)中心構(gòu)建.科技創(chuàng)新導(dǎo)報.2019年9期
[2] 王穎,龐志鵬,基于SDN的云數(shù)據(jù)中心網(wǎng)絡(luò)[J].通訊世界,2017(16): 3-4.
[3] 陳銳,謝人超,黃韜,等.基于SDN的CDN技術(shù)研究[J].電信技術(shù),2014,(6).18-21.
[4] 盧志剛,姜政偉,劉寶旭.一種基于VXLAN的虛擬網(wǎng)絡(luò)訪問控制方法[J].計算機(jī)工程,2014,(8).86-90,95.doi:10.3969/j.issn.1000-3428.2014.08.016.
作者單位:中國人民銀行天門市支行