OpenStackDVR原理深入分析-創(chuàng)新互聯(lián)

一、DVR實驗環(huán)境

一套vlan模式的openstack環(huán)境,interface_driver使用openvswitch,并在計算節(jié)點添加br-ex,用于計算節(jié)點虛擬機出外網(wǎng)。

我們一直強調(diào)成都網(wǎng)站設(shè)計、成都做網(wǎng)站對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站制作公司不一定是大公司,創(chuàng)新互聯(lián)作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。

二、DVR配置

1、控制節(jié)點

a、編輯/etc/neutron/neutron.conf
[DEFAULT]
router_distributed = True

b、重啟neutron-server服務(wù)

2、網(wǎng)絡(luò)節(jié)點

a、編輯/etc/neutron/l3_agent.ini
[DEFAULT]
agent_mode = dvr_snat

b、編輯
/etc/neutron/plugins/ml2/openvswitch_agent.ini
[agent]
enable_distributed_routing = True

c、重啟neutron-l3-agent和neutron-openvswitch-agent服務(wù)

3、計算節(jié)點

a、編輯/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

b、執(zhí)行命令sysctl –p

c、編輯/etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge =
agent_mode = dvr

d、編輯
/etc/neutron/plugins/ml2/openvswitch_agent.ini
[agent]
enable_distributed_routing = True

e、重啟neutron-l3-agent和neutron-openvswitch-agent服務(wù)

三、啟用dhcp實現(xiàn)metadata功能

1、默認情況下,metadata功能通過l3實現(xiàn),在dvr模式下,如果使用l3實現(xiàn)的話,需要額外配置metadata agent,為了簡化,該實驗啟用dhcp agent來實現(xiàn)metadata功能。

a、在網(wǎng)絡(luò)節(jié)點上編輯/etc/neutron/dhcp_agent.ini
[DEFAULT]
force_metadata = True

b、重啟neutron-dhcp-agent服務(wù)。

四、DVR到網(wǎng)關(guān)流表分析

1、創(chuàng)建router,關(guān)聯(lián)到test1網(wǎng)絡(luò)(網(wǎng)關(guān)192.168.1.1),并在test1網(wǎng)絡(luò)內(nèi)創(chuàng)建instance(192.168.1.9),網(wǎng)絡(luò)模型如下:

OpenStack DVR 原理深入分析

執(zhí)行上述操作之后,neutron會在網(wǎng)絡(luò)節(jié)點和計算節(jié)點(有instance運行)上都創(chuàng)建一個router的namespace,且配置完全一樣。

也就是說,平臺中會出現(xiàn)多個相同的router namespace,那么neutron如何實現(xiàn)虛擬機到網(wǎng)關(guān)的流量只到本地的router namespace呢?答案是flow table

2、舉個例子:

a、在test1內(nèi)ping網(wǎng)關(guān)(192.168.1.1),虛擬機會先發(fā)送arp請求去學(xué)習(xí)網(wǎng)關(guān)的mac地址,arp報文會從qvo-xxx端口進入br-int的table0,匹配arp和in_port,根據(jù)流表項,resubmit到table24。

b、在table24中匹配arp、in_port和arp_spa,命中之后,resubmit到table25。

c、在table25中匹配in_port和dl_src,命中之后,resubmit到table60。

d、在table60中,命中table-miss flow entry,根據(jù)action執(zhí)行NORMAL。

e、網(wǎng)關(guān)地址是配置在router namespace中的qr-xxx上,而qr-xxx是br-int上的。

端口,所以qr-xxx會收到arp請求,并進行相應(yīng),arp相應(yīng)報文會從qr-xxx端口再次進入br-int table0,命中table-miss flow entry,從而進行NORMAL轉(zhuǎn)發(fā),將報文轉(zhuǎn)發(fā)給虛擬機的qvo-xxx。

f、虛擬機學(xué)到網(wǎng)關(guān)的mac地址之后,將icmp報文通過流表,轉(zhuǎn)發(fā)給網(wǎng)關(guān),ping流程完成。

3、現(xiàn)在分析neutron如何通過flow table 實現(xiàn)虛擬機到網(wǎng)關(guān)的流量只到本地的router namespace。

在上述的d步驟中,命中table-miss flow entry,根據(jù)action執(zhí)行NORMAL,報文可能通過正常轉(zhuǎn)發(fā),到達br-vlan。

a、報文到達br-vlan后,會進入table=0,匹配in_port,命中后,resubmit到table1

b、在table1中,匹配dl_vlan、arp_tpa(arp報文)或者dl_dst,從而把到網(wǎng)關(guān)的報文,全部drop。

c、通過上述流表,保證到達網(wǎng)關(guān)的報文全部終結(jié)在宿主機本地。

五、虛擬機內(nèi)網(wǎng)通信分析

DVR模式下,虛擬機的內(nèi)網(wǎng)通信一般有四種場景:同網(wǎng)絡(luò)同宿主機,同網(wǎng)絡(luò)不同宿主機,不同網(wǎng)絡(luò)同宿主機,不同網(wǎng)絡(luò)不同宿主機,下面將對這四種場景逐一進行分析:

1、同網(wǎng)絡(luò)同宿主機,不需要通過router,實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

test1和test2運行在同一臺宿主上,執(zhí)行test1 ping test2。

a、test1通過arp學(xué)習(xí)到test2的mac地址,流表匹配過程和步驟4(DVR到網(wǎng)關(guān)流表分析)中arp學(xué)習(xí)相同,然后封裝icmp報文,從qvo-xxx port進入br-int的table0,匹配in_port,命中后,resubmit到table25。

b、在table25中,匹配in_port和dl_src,命中后,resubmit到table60。

c、在table60,命中table-miss,執(zhí)行NORMAL轉(zhuǎn)發(fā)。

d、test2的qvo-yyy port也在br-int上,報文通過qvo-yyy發(fā)送到test2,test2回包給test流程和test1到test2相同。ping流程結(jié)束。

2、同網(wǎng)絡(luò)不同宿主機,不需要router,實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

test1和test2運行在不同宿主上,執(zhí)行test1 ping test2。

此場景下,步驟a,b,c和同網(wǎng)絡(luò)同宿主機場景步驟完全相同,報文會在br-int的table60執(zhí)行NORMAL,此處不再贅述。

d、執(zhí)行NORMAL后,報文會從phy-br-vlan port進入br-vlan的table0,匹配in_port,命中后,resubmit到table1。

e、在table1中,命中table-miss,resubmit table2。

f、在table2中,匹配in_port和dl_vlan,命中后,修改local vlan 1為全局vlan 196,然后執(zhí)行NORMAL,此時報文會離開宿主機,從業(yè)務(wù)口發(fā)出去。

g、報文會被送到運行test2的宿主機業(yè)務(wù)口,然后進入br-vlan的table0,命中后,resubmit到table3。

h、在table3中,命中后,執(zhí)行NORMAL,報文被送到br-int。

i、在br-int的table0中,匹配in_port和dl_vlan,命中后,修改全局vlan 196 為local vlan 1,然后執(zhí)行NORMAL,報文會從qvo-yyy進入虛擬機test2。

j、test2回包和test1發(fā)包過程相同,至此,ping操作完成。

3、不同網(wǎng)絡(luò)同宿主機,需要router,實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

創(chuàng)建router分別連接兩個網(wǎng)絡(luò),每個網(wǎng)絡(luò)上個各創(chuàng)建一臺instance,執(zhí)行上述操作之后,neutron會在網(wǎng)絡(luò)節(jié)點和計算節(jié)點(有instance運行)上都創(chuàng)建一個router的namespace,且配置完全一樣,qr-設(shè)備會被配置上對應(yīng)網(wǎng)關(guān)ip地址。

test1和test2運行在同宿主上,執(zhí)行test1 ping test2。

a、test1 通過計算知道要到達test2需要走三層,它會先發(fā)arp請求,學(xué)習(xí)網(wǎng)關(guān)的mac地址,然后封裝icmp報文(目的ip是test2的ip,目的mac是網(wǎng)關(guān)的mac地址),通過默認路由,將報文送到本地的router namespace。
(學(xué)習(xí)網(wǎng)關(guān)過程中匹配流表的過程請參考 <4、DVR到網(wǎng)關(guān)流表分析>章節(jié))。

b、報文從qr-test1進入router的PREROUTING鏈,然后查找到test2的路由,命中之后,進入POSTROUTING鏈,并從qr-test2重新進入br-int的table0。

c、在table0中,命中table-miss,resubmit到table60。

d、在table60中,命中后,執(zhí)行NORMAL,將報文從qvo-xxx送到test2。

e、test2回包的過程和test1發(fā)包過程相同,至此,ping操作完成。

4、不同網(wǎng)絡(luò)不同宿主機,需要router,實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

test1和test2運行在不同宿主上,執(zhí)行test1 ping test2。

此場景下,步驟a,b,c和不同網(wǎng)絡(luò)同宿主機場景步驟完全相同,
報文從qr-test2出來之后,在br-int的table60執(zhí)行NORMAL,此處不再贅述。

d、在c中執(zhí)行NORMAL之后,報文通過int-br-vlan port進入br-vlan的table0。

e、在table0中,匹配in_port,命中之后,resubmit到table1。

f、在table1中,匹配dl_vlan和dl_src,命中之后,修改源mac地址為neutron分配給宿主機mac,resubmit到table2。

注:開啟DVR之后,neutron會給每個compute節(jié)點分配一個唯一的mac地址,避免物理交換機出現(xiàn)mac地址沖突的問題。

g、在table2中,匹配in_port和dl_vlan,命中之后,修改local vlan 2為全局
vlan 148,執(zhí)行NORMAL,此時報文會從業(yè)務(wù)口eth2離開宿主機。

h、報文會進入運行test2的宿主機的業(yè)務(wù)口eth2進入br-vlan的table0。

i、在table0中,命中之后,resubmit到table3。

j、在table3中,匹配dl_src(neutron分配給宿主機的mac),將報文從phy-br-vlan送出給br-int table0。

k、在br-int的table0中,匹配in_port和dl_src(neturon分配給宿主機的mac),resubmit給table2。

l、在table2中,匹配dl_vlan和dl_dst,修改源mac為test2網(wǎng)關(guān)的mac,resubmit到table60。

m、在table60中,匹配dl_vlan和dl_dst ,剝?nèi)lan,通過output將報文直接送到test2。

n、test2回包的過程和test1發(fā)包過程相同,至此,ping操作完成。

六、虛擬機出外網(wǎng)原理分析

1、創(chuàng)建一個router,并綁定內(nèi)部網(wǎng)絡(luò)test1,設(shè)置路由器的網(wǎng)關(guān)外網(wǎng)為external,在內(nèi)網(wǎng),外網(wǎng)上各創(chuàng)建一臺虛擬機,用于測試,實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

執(zhí)行上述操作之后,neutron會在網(wǎng)絡(luò)節(jié)點創(chuàng)建三個namespace:qrouter-xxx、fip-yyy、snat-xxx。

計算節(jié)點(instance運行)創(chuàng)建qrouter-xxx、fip-yyy。

ps:各節(jié)點的namespace會在接下來的分析中說明其作用。

2、虛擬機test1的報文被送到本宿主機router namespace的qr-xxx設(shè)備上(上述已經(jīng)說明,此處不再贅述),進入PREROUTING鏈(未命中,不做任何修改),查看策略路由,使用默認路由準備進行轉(zhuǎn)發(fā),然后進入POSTROUTING鏈(未命中),報文從qr-xxx發(fā)出,送往192.168.1.11進行處理(流表全部命中NORMAL)。

3、可能有人會有疑問,這里的192.168.1.11是啥?

事實上這個ip地址是neutron分配給snap-yyy namespace的一個ip,被配置在sg-zzz上,snap-yyy namespace在網(wǎng)絡(luò)節(jié)點上,neutron通過策略路由和sg-zzz port將計算節(jié)點router namespace中的報文,轉(zhuǎn)發(fā)到網(wǎng)絡(luò)節(jié)點的snat-yyy中。

4、此時報文到達網(wǎng)絡(luò)節(jié)點的snat-yyy namespace中的sg-zzz port上,在路由之前報文會進入PREROUTING鏈(未命中),然后查找路由。

隨后進入POSTROUTING鏈,進行snat,并做連接跟蹤,之后報文進行轉(zhuǎn)發(fā)。

5、經(jīng)過上述操作,虛擬機通過snat-yyy中的qg-設(shè)備出外網(wǎng),通過連接跟蹤返回(流表命中NORMAL)。

七、Floating ip原理分析

1、在章節(jié)6的基礎(chǔ)上,從外網(wǎng)分配一個floating ip(10.100.0.7),并關(guān)聯(lián)到虛擬機test1(192.168.1.9)上,并需要自行配置br-ex,用于虛擬機出外網(wǎng),實驗?zāi)P腿缦拢?/p>

OpenStack DVR 原理深入分析

執(zhí)行上述操作之后,neutron會在對應(yīng)的namespace里面添加若干策略,下面的分析中會逐一說明:

1、虛擬機test1的報文被送到本宿主機router namespace的qr-xxx設(shè)備上(上述已經(jīng)說明,此處不再贅述),進入PREROUTING鏈(未命中,不做任何修改),查看策略路由。

通過策略路由,將報文通過rfp-6347c62b-2轉(zhuǎn)發(fā)給169.254.109.47處理,隨后進入POSTROUTING鏈,做snat修改。

2、到這里,大家可能會有一個疑問,這個rfp-6347c62b-2設(shè)備是啥?
事實上這個是veth pair的一端,它的另一端在fip-xxx namespace里面

neutron 使用這對veth pair,將報文從router的namespace里面,通過策略路由,轉(zhuǎn)發(fā)到fip-yyy的namespace里。

3、至此,報文到達fip-yyy namespace,進入PREROUTING鏈(未命中),查看路由。

再進入POSTROUTING鏈(未命中),從而將報文從fg-7ec56cee-b5設(shè)備轉(zhuǎn)發(fā)到外網(wǎng)。

4、至此,報文順利從fg port發(fā)送到外網(wǎng)(流表命中NORMAL)。

5、現(xiàn)在開始分析外網(wǎng)設(shè)備通過floating ip進入虛擬機的情況。

假設(shè)存在一臺外網(wǎng)設(shè)備external(10.100.0.14)去ping floating ip(10.100.0.7),外網(wǎng)設(shè)備首先會通過arp學(xué)習(xí)10.100.0.7的mac地址,而上述描述中,neutron并沒有配置10.100.0.7的ip地址在任何設(shè)備上,也就是說,10.100.0.7并不存在,那報文是如何準確的送到fg口的呢?

事實上,neutron在fg port上開啟了arp_haproxy功能,相當(dāng)于進行了arp欺騙,這樣,外網(wǎng)設(shè)備就將fg的mac地址學(xué)習(xí)成10.100.0.7的mac,并更新到自己的mac表中。

6、外網(wǎng)報文到達fg口之后,進入PREROUTING鏈(未命中),查看route表,準備將目的ip為floating ip的報文從fpr-6347c62b-2發(fā)送169.254.109.46。

隨后進入POSTROUTING鏈(未命中),報文轉(zhuǎn)發(fā)到router的namespace中。

7、報文到達router的namespace中的rfp-6347c62b-2設(shè)備,進入PREROUTING鏈,進行dnat操作。將目的ip從floating ip轉(zhuǎn)換成內(nèi)部fix ip(192.168.1.9)

隨后查看route,準備將報文從qr-xxx port轉(zhuǎn)發(fā)。

然后進入POSTROUTING鏈(未命中),將報文從qr- port轉(zhuǎn)發(fā)到虛擬機test1。

8、至此,實現(xiàn)外網(wǎng)設(shè)備到內(nèi)部ip的轉(zhuǎn)發(fā)完成。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文名稱:OpenStackDVR原理深入分析-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article0/djicio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作網(wǎng)站制作、靜態(tài)網(wǎng)站建站公司、關(guān)鍵詞優(yōu)化、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司