一 二層基礎(chǔ)知識
1.1 vlan介紹
1.1.1:vlan的含義
1.1.2:vlan的類型
1.1.3:vlan的不足
1.2 : 二層交換的基礎(chǔ)知識
1.2.1:二層交換機(jī)最基本的功能
1.2.2:ARP協(xié)議
二 使用OpenvSwitch(OVS)+VLAN組網(wǎng)
2.1 物理VLAN網(wǎng)絡(luò)配置
2.2 Neutron配置
2.2.1 配置進(jìn)行
2.2.2 配置生效過程
2.3:創(chuàng)建虛擬網(wǎng)絡(luò)和子網(wǎng)
2.3.1 創(chuàng)建命令
2.3.2 Neutron代碼實(shí)現(xiàn)
2.4:Neturon虛擬網(wǎng)絡(luò)
一 二層基礎(chǔ)知識
1.1 vlan介紹
本小節(jié)重點(diǎn):
vlan的含義
vlan的類型
交換機(jī)端口類型
vlan的不足
1.1.1:vlan的含義
局域網(wǎng)LAN的發(fā)展是VLAN產(chǎn)生的基礎(chǔ)惨奕,因而先介紹一下局域網(wǎng)LAN
由Hub车荔、網(wǎng)橋或交換機(jī)等網(wǎng)絡(luò)設(shè)備連接同一網(wǎng)段內(nèi)的所有節(jié)點(diǎn)形成局域網(wǎng)(LAN)颂碘,通常是一個(gè)單獨(dú)的廣播域。
處于同一個(gè)局域網(wǎng)LAN之內(nèi)的網(wǎng)絡(luò)節(jié)點(diǎn)之間可以直接通信
處于不同局域網(wǎng)段的設(shè)備之間的通信則必須經(jīng)過路由器才能通信处渣。
上述傳統(tǒng)拓?fù)浣Y(jié)構(gòu)的關(guān)鍵在于用三層設(shè)備球散,即路由器蒜胖,來隔離不同的LAN环葵,在網(wǎng)絡(luò)規(guī)模增大的情況下存在兩個(gè)缺陷:
1. 路由器數(shù)量需要增多,網(wǎng)絡(luò)時(shí)延隨之加長嗜愈,進(jìn)而導(dǎo)致網(wǎng)絡(luò)數(shù)據(jù)傳輸速度的下降旧蛾。這主要是因?yàn)閿?shù)據(jù)在從一個(gè)局域網(wǎng)傳遞到另一個(gè)局域網(wǎng)時(shí),必須經(jīng)過路由器的路由操作: 路由器根據(jù)數(shù)據(jù)包中的相應(yīng)信息確定數(shù)據(jù)包的目標(biāo)地址蠕嫁,然后再選擇合適的路徑轉(zhuǎn)發(fā)出去锨天。
2. 用戶是按照它們的物理連接被自然地劃分到不同的用戶組(廣播域)中。這種分割方式并不是根據(jù)工作組中所有用戶的共同需要和帶寬的需求來進(jìn)行的剃毒。因此病袄,盡管不同的工作組或部門對帶寬的需求有很大的差異,但它們卻被機(jī)械地劃分到同一個(gè)廣播域中爭用相同的帶寬赘阀。
綜上兩點(diǎn)益缠,必須選出一種隔離廣播域的方式,兼?zhèn)湎率鰞牲c(diǎn)
1.可以不用通過路由器來隔離不同廣播域
2.可以突破地理位置的限制基公,在邏輯上劃分出不同的廣播域
這就是VLAN幅慌,IEEE 802.1Q 標(biāo)準(zhǔn)定義了 VLAN Header 的格式。它在普通以太網(wǎng)幀結(jié)構(gòu)的 SA (src addr)之后加入了 4bytes 的 VLAN Tag/Header 數(shù)據(jù)轰豆,其中包括 12-bits 的 VLAN ID胰伍。VLAN ID 最大值為4096,但是有效值范圍是 1 - 4094秒咨。
帶 VLAN 的交換機(jī)的端口分為兩類:
- Access port:這些端口被打上了 VLAN Tag喇辽。離開交換機(jī)的 Access port 進(jìn)入計(jì)算機(jī)的以太幀中沒有 VLAN Tag掌挚,這意味著連接到 access ports 的機(jī)器不會覺察到 VLAN 的存在雨席。離開計(jì)算機(jī)進(jìn)入這些端口的數(shù)據(jù)幀被打上了 VLAN Tag。
- Trunk port: 有多個(gè)交換機(jī)時(shí)吠式,組A中的部分機(jī)器連接到 switch 1陡厘,另一部分機(jī)器連接到 switch 2。要使得這些機(jī)器能夠相互訪問特占,你需要連接兩臺交換機(jī)糙置。 要避免使用一根電纜連接每個(gè) VLAN 的兩個(gè)端口,我們可以在每個(gè)交換機(jī)上配置一個(gè) VLAN trunk port是目。Trunk port 發(fā)出和收到的數(shù)據(jù)包都帶有 VLAN header谤饭,該 header 表明了該數(shù)據(jù)包屬于那個(gè) VLAN。因此,只需要分別連接兩個(gè)交換機(jī)的一個(gè) trunk port 就可以轉(zhuǎn)發(fā)所有的數(shù)據(jù)包了揉抵。通常來講亡容,只使用 trunk port 連接兩個(gè)交換機(jī),而不是用來連接機(jī)器和交換機(jī)冤今,因?yàn)闄C(jī)器不想看到它們收到的數(shù)據(jù)包帶有 VLAN Header闺兢。
單臺交換機(jī)上劃分VLAN
多臺交換機(jī)上劃分VLAN
1.1.2:vlan的類型
(1)基于端口的 VLAN (untagged VLAN - 端口屬于一個(gè)VLAN,數(shù)據(jù)幀中沒有VLAN tag)
這種模式中戏罢,在交換機(jī)上創(chuàng)建若干個(gè)VLAN屋谭,在將若干端口放在每個(gè)VLAN 中。每個(gè)端口在某一時(shí)刻只能屬于一個(gè)VLAN龟糕。一個(gè) VLAN 可以包含所有端口桐磁,或者部分端口。每個(gè)端口有個(gè)PVID (port VLAN identifier)翩蘸。這種模式下所意,一個(gè)端口上收到的 frame 是 untagged frame,因此它不包含任何有關(guān) VLAN 的信息催首。VLAN 的關(guān)系只能從端口的 PVID 上看出來扶踊。交換機(jī)在轉(zhuǎn)發(fā) frame 時(shí),只將它轉(zhuǎn)發(fā)到相同 PVID 的端口郎任。
如上圖所示秧耗,連接兩個(gè)交換機(jī)的同一個(gè) VLAN 中的兩個(gè)計(jì)算機(jī)需要通信的話,需要在兩個(gè)交換機(jī)之間連兩根線:
- 一根從 Switch A 端口4 到 Switch B 端口 4 (VLAN 1)
- 一根從 Switch A 端口8 到 Switch B 端口 8 (VLAN 2)
(2)Tagged VLANs (數(shù)據(jù)幀中帶有 VLAN tag)
這種模式下舶治,frame 的VLAN 關(guān)系是它自己攜帶的信息中保存的分井,這種信息叫 a tag or tagged header。當(dāng)交換機(jī)收到一個(gè)帶 VLAN tag 的幀霉猛,它只將它轉(zhuǎn)發(fā)給具有同樣 VID 的端口尺锚。一個(gè)能夠接收或者轉(zhuǎn)發(fā) tagged frame 的端口被稱為 a tagged port。所有連接到這種端口的網(wǎng)絡(luò)設(shè)備必須是 802.1Q 協(xié)議兼容的惜浅。這種設(shè)備必須能處理 tagged frame瘫辩,以及添加 tag 到其轉(zhuǎn)發(fā)的 frame。
上圖中坛悉,兩個(gè)交換機(jī)上的端口8 支持 VLAN 1 和 2伐厌, 因此一根線就可以了實(shí)現(xiàn)跨交換機(jī)的同VLAN 內(nèi)的計(jì)算機(jī)互相通信了。
1.1.3:vlan的不足
- VLAN 使用 12-bit 的 VLAN ID裸影,所以 VLAN 的第一個(gè)不足之處就是它最多只支持 4096 個(gè) VLAN 網(wǎng)絡(luò)(當(dāng)然這還要除去幾個(gè)預(yù)留的)挣轨,對于大型數(shù)據(jù)中心的來說,這個(gè)數(shù)量是遠(yuǎn)遠(yuǎn)不夠的轩猩。
- VLAN 是基于 L2 的卷扮,所以很難跨越 L2 的邊界荡澎,在很大程度上限制了網(wǎng)絡(luò)的靈活性。
- VLAN 操作需手工介入較多晤锹,這對于管理成千上萬臺機(jī)器的管理員來說是難以接受的衔瓮。
1.2 : 二層交換的基礎(chǔ)知識
1.2.1:二層交換機(jī)最基本的功能
二層交換機(jī)最基本的功能包括:
- MAC 地址學(xué)習(xí):當(dāng)交換機(jī)從它的某個(gè)端口收到數(shù)據(jù)幀時(shí),它將端口的 ID 和幀的源 MAC 地址保存到它的內(nèi)部MAC表中抖甘。這樣热鞍,當(dāng)將來它收到一個(gè)要轉(zhuǎn)發(fā)到該 MAC 地址的幀時(shí),它就知道直接從該端口轉(zhuǎn)發(fā)出去了衔彻。
- 數(shù)據(jù)幀轉(zhuǎn)發(fā):交換機(jī)在將從某個(gè)端口收到數(shù)據(jù)幀薇宠,再將其從某個(gè)端口轉(zhuǎn)發(fā)出去之前,它會做一些邏輯判斷:
如果幀的目的 MAC 地址是廣播或者多播地址的話艰额,將其從交換機(jī)的所有端口(除了傳入端口)上轉(zhuǎn)發(fā)澄港。
如果幀的目的MAC地址在它的內(nèi)部MAC表中能找到對應(yīng)的輸出端口的話(MAC 地址學(xué)習(xí)過程中保存的),將其從該端口上轉(zhuǎn)發(fā)出去柄沮。
對其它情況回梧,將其從交換機(jī)的所有端口(除了傳入端口)上轉(zhuǎn)發(fā)。 -
加 VLAN 標(biāo)簽/去 VLAN 標(biāo)簽:
幀接收:從 trunk port 上收到的數(shù)據(jù)幀必須是加了標(biāo)簽的祖搓。從 access port 上收到的數(shù)據(jù)幀必須是沒有加標(biāo)簽的狱意,否則該幀將會被拋棄。
幀處理:根據(jù)上述轉(zhuǎn)發(fā)流程決定其發(fā)出的端口拯欧。
幀發(fā)出:從 trunk port 發(fā)出的幀是加了標(biāo)簽的详囤。從 access port 上發(fā)出的幀必須是沒加標(biāo)簽的。
默認(rèn)情況下镐作,交換機(jī)的所有端口都處于VLAN 1 中藏姐,也就相當(dāng)于沒有配置 VLAN。該機(jī)制說明如下:
1.PC A 發(fā)一個(gè)幀到交換機(jī)的 1 端口该贾,其目的MAC地址為 PC B 的 MAC羔杨。
2.交換機(jī)比較其目的 MAC 地址和它的內(nèi)部 MAC Table,發(fā)現(xiàn)它不存在(此時(shí)表為空)杨蛋。在決定泛洪之前兜材,它把端口 1 和 PC A 的 MAC 地址存進(jìn)它的 MAC Table。
3.交換機(jī)將幀拷貝多份六荒,分別從2和3端口發(fā)出护姆。
4.PC B 收到該幀以后矾端,發(fā)現(xiàn)其目的 MAC 地址和他自己的 MAC 地址相同掏击。它發(fā)出一個(gè)回復(fù)幀進(jìn)入端口3。
5.交換機(jī)將 PC B 的 MAC地址和端口3 存在它的 MAC 表中秩铆。
6.因?yàn)樵搸哪康牡刂窞镻C A 的 MAC 地址它已經(jīng)在 MAC 表中砚亭,交換機(jī)直接將它轉(zhuǎn)發(fā)到端口1灯变,達(dá)到PC A。
配置了 VLAN 的交換機(jī)的該機(jī)制類似捅膘,只不過:
(1)MAC 表格中每一行有不同的 VLAN ID添祸。做比較的時(shí)候,拿傳入幀的目的 MAC 地址和 VLAN ID 和此表中的行數(shù)據(jù)相比較寻仗。如果都相同刃泌,則選擇其 Ports 作為轉(zhuǎn)發(fā)出口端口。
(2)如果沒有吻合的表項(xiàng)署尤,則將此幀從所有有同樣 VLAN ID 的 Access ports 和 Trunk ports 轉(zhuǎn)發(fā)出去耙替。
1.2.2:ARP協(xié)議
二層網(wǎng)絡(luò)使用 MAC (media access control address)地址作為硬件的唯一標(biāo)識〔芴澹基于 TCP/IP 協(xié)議的軟件使用 ARP 來將 IP 地址轉(zhuǎn)化為 MAC 地址俗扇。
-
目的 IP 地址在同一網(wǎng)段的話
該示例中,Host A 和 B 在同一個(gè)網(wǎng)段中箕别。A 的 IP 地址是 10.0.0.99铜幽,B 的 IP 地址是 10.0.0.100。當(dāng) A 要和 B 通信時(shí)串稀,A 需要知道 B 的 MAC 地址除抛。該過程經(jīng)過以下步驟:
(1)A 上的 IP 協(xié)議棧知道通過B 的 IP 地址可以直接到達(dá) B。A 檢查它的本地 ARP 緩存來看B 的 MAC 地址是否已經(jīng)存在母截。
(2)如果A 沒有發(fā)現(xiàn)B 的 MAC 地址镶殷,它發(fā)出一個(gè) ARP 廣播請求,來詢問“10.0.0.100 的 MAC 地址是什么微酬?”绘趋,該數(shù)據(jù)包:
SRC MAC: A 的 MAC
DST MAC:FF:FF:FF:FF:FF:FF
SRA IP: A 的 IP
DST IP: B 的 IP
(3)該網(wǎng)段中所有的電腦都將收到該包,并且會檢查 DST IP 和自己的IP 是否相同颗管。如果不同陷遮,則丟棄該包。Host B 發(fā)現(xiàn)其IP 地址和 DST IP 相同垦江,它將 A 的 IP/MAP 地址加入到自己的ARP 緩存中帽馋。
(4)B 發(fā)出一個(gè) ARP 回復(fù)消息
SRC MAC: B 的 MAC
DST MAC:A 的 MAC
SRA IP: B 的 IP
DST IP: A 的 IP
(5)交換機(jī)直接將該包交給 host A。A 收到后比吭,將 B 的 MAC/IP 地址緩存到 ARP 緩存中绽族。
(6)A 使用 B 的 MAC 作為目的 MAC 地址發(fā)出 IP 包。
-
目的IP 地址不在同一個(gè)網(wǎng)段的話
本例子中衩藤,A 的地址是 10.0.0.99吧慢, B 的地址是 192.168.0.99。Router 的 interface 1 和 A 在同一個(gè)網(wǎng)段赏表,其IP 地址為10.0.0.1检诗;interface 2 和 B 在同一個(gè)網(wǎng)段匈仗,其IP地址為 192.168.0.1。
A 使用下面的步驟來獲取 Router 的 interface 1 的 MAC 地址逢慌。
(1)根據(jù)其路由表悠轩,A 上的 IP 協(xié)議知道需要通過它上面配置的 gateway 10.0.0.1 才能到達(dá)到 B。經(jīng)過上面例子中的步驟攻泼,A 會得到 10.0.0.1 的 MAC 地址火架。
(2)當(dāng) A 收到 Router interface 1 的 MAC 地址后,A 發(fā)出了給B 的數(shù)據(jù)包:
SRC MAC: A 的 MAC
DST MAC:Router 的 interface 1 的 MAC 地址
SRA IP: A 的 IP
DST IP: B 的 IP
(3)路由器的 interface1 收到該數(shù)據(jù)包后忙菠,根據(jù)其路由表距潘,首先經(jīng)過同樣的ARP 過程,路由器根據(jù) B 的 IP 地址通過 ARP 獲得其 MAC 地址只搁,然后將包發(fā)給它音比。
SRC MAC: Router interface 2 的 MAC
DST MAC:B 的 MAC
SRA IP: A 的 IP
DST IP: B 的 IP
二 使用OpenvSwitch(OVS)+VLAN組網(wǎng)
Neutron 基于 VLAN 模式的 tenant network 同 provider network 一樣,都必須使用物理的 VLAN 網(wǎng)絡(luò)氢惋。
2.1 物理VLAN網(wǎng)絡(luò)配置
本例子中洞翩,交換機(jī)上劃分了三個(gè) VLAN 區(qū)域:
- 管理網(wǎng)絡(luò),用于 OpenStack 節(jié)點(diǎn)之間的通信焰望,假設(shè) VLAN ID 范圍為 50 - 99.
- 數(shù)據(jù)網(wǎng)絡(luò)骚亿,用于虛擬機(jī)之間的通訊。由于Vlan模式下熊赖,租戶建立的網(wǎng)絡(luò)都具有獨(dú)立的 Vlan ID来屠,故需要將連接虛機(jī)的服務(wù)器的交換機(jī)端口設(shè)置為 Trunk 模式,并且設(shè)置所允許的 VLAN ID 范圍震鹉,比如 100~300俱笛。
-
外部網(wǎng)絡(luò),用于連接外部網(wǎng)絡(luò)传趾。加上 VLAN ID 范圍為 1000-1010迎膜。
關(guān)于網(wǎng)段之間的路由:
- 如果該物理交換機(jī)接到一個(gè)物理路由器并做相應(yīng)的配置,則數(shù)據(jù)網(wǎng)絡(luò)可以使用這個(gè)物理路由器浆兰,而不需要使用 Neutron 的虛擬路由器磕仅。
- 如果不使用物理的路由器,可以在網(wǎng)絡(luò)節(jié)點(diǎn)上配置虛擬路由器簸呈。
2.2 Neutron配置
2.2.1 配置進(jìn)行
控制節(jié)點(diǎn)上:
# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan
tenant_network_types = vlan
mechanism_drivers = openvswitch
[ml2_type_flat]
flat_networks = external
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:300
網(wǎng)絡(luò)節(jié)點(diǎn)上:
#為連接物理交換機(jī)的網(wǎng)卡 eth2 和 eth3 建立 OVS physical bridge榕订,其中,eth2 用于數(shù)據(jù)網(wǎng)絡(luò)蜕便,eth3 用于外部網(wǎng)絡(luò)
ovs-vsctl add-br br-eth2
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-eth2 eth2
ovs-vsctl add-port br-ex eth3
# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[m12]
type_drivers = flat,vlan
tenant_network_types = vlan
mechanism_drivers = openvswitch
[ml2_type_flat]
flat_networks = external
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:300,external:1000:1010
[ovs]
bridge_mappings = physnet1:br-eth2,external:br-ex
計(jì)算節(jié)點(diǎn)上:
#為連接物理交換機(jī)的網(wǎng)卡 eth2 建立 OVS physical bridge
ovs-vsctl add-br br-eth2
ovs-vsctl add-port br-eth2 eth2
# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[m12]
type_drivers = vlan
tenant_network_types = vlan
mechanism_drivers = openvswitch
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:300
[ovs]
bridge_mappings = physnet1:br-eth2
注意:
- network_vlan_ranges 中的 VLAN ID 必須和物理交換機(jī)上的 VLAN ID 區(qū)間一致劫恒。
- bridge_mappings 中所指定的 bridge 需要和在個(gè)節(jié)點(diǎn)上手工創(chuàng)建的 OVS bridge 一致。
然后重啟相應(yīng)的 Neutron 服務(wù)玩裙。
2.2.2 配置生效過程
當(dāng) Neutron L2 Agent (OVS Agent 或者 Linux Bridge agent)在計(jì)算和網(wǎng)絡(luò)節(jié)點(diǎn)上啟動時(shí)兼贸,它會根據(jù)各種配置在節(jié)點(diǎn)上創(chuàng)建各種 bridge。以 OVS Agent 為例吃溅,
(1)創(chuàng)建 intergration brige(默認(rèn)是 br-int)溶诞;如果 enable_tunneling = true 的話,創(chuàng)建 tunnel bridge (默認(rèn)是 br-tun)决侈。
(2)根據(jù) bridge_mappings螺垢,配置每一個(gè) VLAN 和 Flat 網(wǎng)絡(luò)使用的 physical network interface 對應(yīng)的預(yù)先創(chuàng)建的 OVS bridge。
(3)所有虛機(jī)的 VIF 都是連接到 integration bridge赖歌。同一個(gè)虛擬網(wǎng)絡(luò)上的 VM VIF 共享一個(gè)本地 VLAN (local VLAN)枉圃。Local VLAN ID 被映射到虛擬網(wǎng)絡(luò)對應(yīng)的物理網(wǎng)絡(luò)的 segmentation_id。
(4)對于 GRE 類型的虛擬網(wǎng)絡(luò)庐冯,使用 LSI (Logical Switch identifier)來區(qū)分隧道(tunnel)內(nèi)的租戶網(wǎng)絡(luò)流量(tenant traffic)孽亲。這個(gè)隧道的兩端都是每個(gè)物理服務(wù)器上的 tunneling bridge。使用 Patch port 來將 br-int 和 br-tun 連接起來展父。
(5)對于每一個(gè) VLAN 或者 Flat 類型的網(wǎng)絡(luò)返劲,使用一個(gè) veth 或者一個(gè) patch port 對來連接 br-int 和物理網(wǎng)橋,以及增加 flow rules等栖茉。
(6)最后篮绿,Neutron L2 Agent 啟動后會運(yùn)行一個(gè)RPC循環(huán)任務(wù)來處理 端口添加、刪除和修改吕漂。管理員可以通過配置項(xiàng) polling_interval 指定該 RPC 循環(huán)任務(wù)的執(zhí)行間隔亲配,默認(rèn)為2秒。
2.3:創(chuàng)建虛擬網(wǎng)絡(luò)和子網(wǎng)
2.3.1 創(chuàng)建命令
s1@controller:~$ neutron net-create net1 (或者 Admin 用戶運(yùn)行 neutron net-create net1 --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 101惶凝。效果相同)
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | dfc74f44-a9f2-4497-a53d-1723804a49a8 |
| name | net1 |
| provider:network_type | vlan |
| provider:physical_network | physnet1 |
| provider:segmentation_id | 101 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 74c8ada23a3449f888d9e19b76d13aab |
+---------------------------+--------------------------------------+
s1@controller:~$ neutron subnet-create subnet1 10.0.0.0/24 --name net1
2.3.2 Neutron代碼實(shí)現(xiàn)
做完以上的步驟之后吼虎,用戶就可以在 subnet 上 boot 虛機(jī)了。
boot 虛機(jī)的過程中苍鲜,Nova 依次會:
(1)調(diào)用 Neutron REST API 申請一個(gè)或者多個(gè) port鲸睛。Neutron 會根據(jù)數(shù)據(jù)庫中的配置來進(jìn)行分配。
(2)在計(jì)算節(jié)點(diǎn)上坡贺,Nova 調(diào)用 ovs-vsctl 命令將虛機(jī)的 VIF 被 plug 到 br-int 上官辈。
(3)啟動虛機(jī)。
Neutron L2 Agent 的循環(huán)任務(wù)每隔兩秒會依次:
(1)調(diào)用 ”ovs-vsctl list-ports“ 命令獲取到 br-int 上的 port遍坟,再根據(jù)上次保存的歷史數(shù)據(jù)拳亿,生成所有變更端口的列表(包括添加的、更新的愿伴、刪除的端口)肺魁。比如:
{'current': set([u'04646b21-78a0-429e-85be-3167042b77be', u'592740b0-0768-4e57-870d-6495e6c22135']), 'removed': set([]), 'added': set([u'04646b21-78a0-429e-85be-3167042b77be', u'592740b0-0768-4e57-870d-6495e6c22135'])}
(2)為每一個(gè)待處理端口,根據(jù)其 ID 從 DB 中取得其詳細(xì)信息隔节。比如:
{u'profile': {}, u'admin_state_up': True, u'network_id': u'e2022937-ec2a-467a-8cf1-f642a3f777b6', u'segmentation_id': 4, u'device_owner': u'compute:nova', u'physical_network': phynet1, u'mac_address': u'fa:16:3e:fd:ed:22', u'device': u'592740b0-0768-4e57-870d-6495e6c22135', u'port_id': u'592740b0-0768-4e57-870d-6495e6c22135', u'fixed_ips': [{u'subnet_id': u'13888749-12b3-462e-9afe-c527bd0a297e', u'ip_address': u'91.1.180.4'}], u'network_type': u'vlan'}
(3)針對每一個(gè)增加或者變更的 port鹅经,設(shè)置 local VLAN Tag寂呛;調(diào)用 ”ovs-ofctl mod-flows “ 命令來設(shè)置 br-tun 或者 物理 bridge 的 flow rules;并設(shè)置 db 中其狀態(tài)為 up瘾晃。
(4)針對每一個(gè)被刪除的 port贷痪,設(shè)置 db 中其狀態(tài)為 down。
2.4:Neturon虛擬網(wǎng)絡(luò)
(1)一個(gè)計(jì)算節(jié)點(diǎn)上的網(wǎng)絡(luò)實(shí)例
它反映的網(wǎng)絡(luò)配置如下:
Neutron 使用 Open vSiwtch蹦误。
一臺物理服務(wù)器劫拢,網(wǎng)卡 eth1 接入物理交換機(jī),預(yù)先配置了網(wǎng)橋 br-eth1强胰。
創(chuàng)建了兩個(gè) neutron VLAN network舱沧,分別使用 VLAN ID 101 和 102。
該服務(wù)器上運(yùn)行三個(gè)虛機(jī)偶洋,虛機(jī)1 和 2 分別有一個(gè)網(wǎng)卡接入 network 1熟吏;虛機(jī)2 和 3 分別有一個(gè)網(wǎng)卡接入 network 2.
Neutron在該計(jì)算節(jié)點(diǎn)上做的事情:
創(chuàng)建了OVS Integration bridge br-int。它的四個(gè)Access口中玄窝,兩個(gè)打上了內(nèi)部vlan Tag1分俯,連接接入network1的兩個(gè)網(wǎng)卡;另外兩個(gè)端口打上的是vlan tag 2
創(chuàng)建一對patch port連接br-int和br-eth1
設(shè)置br-int中的flow rules哆料。對從access ports進(jìn)入的數(shù)據(jù)幀缸剪,加上相應(yīng)的vlan tag,轉(zhuǎn)發(fā)到patch port东亦;從patch port進(jìn)入的數(shù)據(jù)幀杏节,將vlan id 101修改為1,102修改為2,再轉(zhuǎn)發(fā)到相應(yīng)的access ports
設(shè)置br-eth1中的flow rules典阵。從patch port進(jìn)入的數(shù)據(jù)幀奋渔,將內(nèi)部vlan id 1修改為101,內(nèi)部vlan id 2修改為102壮啊,再從eth1端口發(fā)出嫉鲸。對從eht1進(jìn)入的數(shù)據(jù)幀做相反的處理
(2)再加上另一個(gè)連接到同一個(gè)物理交換機(jī)的服務(wù)器(加上 neutron 網(wǎng)絡(luò)使用的 VLAN ID 為 100,物理 brige 為 br-eth0):
Neutron 實(shí)現(xiàn)了基于物理 VLAN 交換機(jī)的跨物理服務(wù)器二層虛擬網(wǎng)絡(luò)歹啼。
(3)連接到同一物理交換機(jī)的網(wǎng)絡(luò)節(jié)點(diǎn)的情況
(4)網(wǎng)絡(luò)流向
- 不同物理服務(wù)器上的虛機(jī)玄渗,如果 VM1 和 VM2 屬于同一個(gè) tenant network 的同一個(gè)subnet,那么兩者的通信直接經(jīng)過 物理交換機(jī) 進(jìn)行狸眼,不需要做到網(wǎng)絡(luò)節(jié)點(diǎn)藤树。如圖10 所示。
-
相同物理服務(wù)器上的虛機(jī)拓萌,如果 VM1 和 VM2 屬于同一個(gè) tenant network 的同一個(gè)subnet岁钓,那么兩者的通信直接經(jīng)過 br-int 進(jìn)行。
對其他虛機(jī)之間數(shù)據(jù)交換情形,都算作跨子網(wǎng)的數(shù)據(jù)流向屡限,都需要經(jīng)過網(wǎng)絡(luò)節(jié)點(diǎn)中的 Router 進(jìn)行 IP 包的路由品嚣。(也可以直接使用連接物理交換機(jī)的物理路由器)。