講清楚說明白openstack中vm流量走向之1——集中式網絡節點

1、背景介紹

openstack被廣大公有云廠商所採用,對於公有云場景來說Newtron組件所提供的網絡功能,一直是較難理解的部分,本文詳細介紹在openstack集中網絡節點架構下,vm的南北向與東西向流量實現。 node

2、網絡節點功能

因爲openstack默認部署模式下,計算節點經過ml2插件實現二層互通,全部三層流量都要通過網絡節點,以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
圖中同一tenant下有2個不一樣子網,vm1/2和vm3/4分別屬於不一樣的subnet,經過上圖能夠看出不一樣子網之間通訊,以及未綁定fip的vm與公網間通訊,和擁有fip的vm經過公網訪問都須要通過網絡節點,網絡節點存在單點隱患,對此須要經過L3 HA來對該節點進行高可用。 linux

3、openstack中的網絡類型

openstack中網絡模式分爲2種:provider網絡和self-service網絡。provider是一個半虛擬化的二層網絡架構,只能經過橋接的方式實現,處於provider網絡模式下vm獲取到的ip地址與物理網絡在同一網段,能夠當作是物理網絡的擴展,在該模式下,控制節點不須要安裝L3 agent,也不須要網絡節點,vm直接經過宿主機的NIC與物理網絡通訊,provider網絡只支持flat和vlan兩種模式。其架構以下:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
而self-service模式容許租戶本身建立網絡,最終租戶建立的網絡藉助provider網絡以NAT方式訪問外網,因此self-service模式能夠當作是網絡層級的延伸,要實現self-service模式必須先建立provider網絡,self-service網絡支持flat、vlan、vxlan、gre模式。其架構以下:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
vm從self-service獲取到的IP地址稱爲fix ip,vm從provider網絡獲取到的IP地址稱爲floating IP。無論租戶建立的網絡類型爲vxlan或者vlan(br-tun或br-vlan)租戶vm之間經過fix ip之間的互訪流量稱爲東西走向,只有當vm須要經過snat訪問外網或者從經過fip訪問vm時,此時的流量稱爲南北走向。 安全

4、網絡節點內部組件

相對於計算機點,網絡節點中多了租戶的dhcp和router空間和鏈接internet的br-ex(計算節點一樣擁有br-int和br-tun/vlan的OVS,詳見做者其餘博文),
網絡節點的內部組件通訊以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
從上圖得知:fix ip最終須要藉助router namespace中的iptables規則,以sant或dnat的方式實現vm訪問外網或被外網訪問。固然也可讓vm直接接入provider網絡,但provider網絡只是一個二層的虛擬化網絡,須要藉助物理設備來實現三層及以上功能。如下就以self-service模式爲例,詳細說明vm的東西和南北流量走向。 網絡

5、vm的東西流量分析

經過前面知道,一個tenant能夠建立多個subnet,此時vm之間的通訊就分爲同一個subnet和不一樣subnet之間兩種狀況,區別就是,不一樣subnet之間的通訊須要通過網關(網絡節點),而同subnet之間的通訊不須要通過網絡節點。 架構

1.不一樣subnet之間的通訊

不管tenant建立的網絡類型是隧道仍是vlan,不一樣subnet之間的通訊必須藉助L3 Agent完成,而在集中式網絡節點架構中,只有網絡節點部署了該角色,vm之間的流量以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
1.vm1向vm2發出通訊請求,根據目的IP地址得知vm2和本身不在同一網段,將數據包送往網關。
2.數據包通過linux bridge經過其上的iptables安全策略檢查,按後送往br-int並打上內部vlan號。
3.數據包脫掉br-int的內部vlan號進入br-tun/br-vlan。
4.進入br-tun的數據包此時vxlan封裝並打上vni號,進入br-vlan的數據包此時打上外部vlan號,經過nic離開compute1。
5.數據包進入網絡節點,通過br-tun的數據包完成vxlan的解封裝去掉vni號,通過br-vlan的數據包去掉vlan號。
6.數據包進入br-int,此時會被打上內部vlan號。
7.進入router namespace路由空間找到網關,vm1的網關配置在此路由器接口qr-1口上。
8.將數據包路由到vm2的網關,vm2的網關配置在qr-2口上,送回br-int並打上內部vlan號。
9.數據包脫掉br-int的內部vlan號進入br-tun/br-vlan。
10.進入br-tun的數據包此時vxlan封裝並打上vni號,進入br-vlan的數據包此時打上外部vlan號,經過nic離開network node。
11.數據包進入compute2,通過br-tun的數據包完成vxlan的解封裝去掉vni號,通過br-vlan的數據包去掉vlan號。
12.數據包進入br-int,此時會被打上內部vlan號。
13.數據包通過離開br-int並去掉內部vlan號,送往linux bridge經過其上的iptables安全策略檢查。
14.最後數據包送到vm2。 ide

2.相同subnet間通訊

相同subnet之間通訊不須要藉助L3 Agent,vm之間流量以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
1.vm1向vm2發起請求,經過目的IP地址得知vm2與本身在同一網段。
2.數據包通過linux bridge,進行安全策略檢查,進入br-int打上內部vlan號。
3.數據包脫掉br-int的內部vlan號進入br-tun/br-vlan。
4.進入br-tun的數據包此時vxlan封裝並打上vni號,進入br-vlan的數據包此時打上外部vlan號,經過nic離開compute1。
5.數據包進入compute2,通過br-tun的數據包完成vxlan的解封裝去掉vni號,通過br-vlan的數據包去掉vlan號。
6.數據包進入br-int,此時會被打上內部vlan號。
7.數據包通過離開br-int並去掉內部vlan號,送往linux bridge經過其上的iptables安全策略檢查。
8.最後數據包送到vm2。 spa

6、vm的南北流量分析

南北流量也分爲有floating ip和無floating ip(fix ip)兩種狀況,惟一的區別在於vm最終離開network node訪問internet時,有floating ip的vm源地址爲floating ip,而使用fix ip的vm經過snat方式,源地址爲network node的ip,vm南北流量以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
1.vm1向公網發出通訊請求,數據包被送往網關。
2.數據包通過linux bridge經過其上的iptables安全策略檢查,按後送往br-int並打上內部vlan號。
3.數據包脫掉br-int的內部vlan號進入br-tun/br-vlan,進入br-tun的數據包此時vxlan封裝並打上vni號,進入br-vlan的數據包此時打上外部vlan號,經過nic離開compute1。
4.數據包進入網絡節點,通過br-tun的數據包完成vxlan的解封裝去掉vni號,通過br-vlan的數據包去掉vlan號,再被送往br-int,此時會被打上內部vlan號。
5.進入router namespace路由空間查詢路由表項,vm1的網關配置在此路由器qr接口上。
6.數據包在此路由器上完成地址轉換,源地址變成qg口network node節點的外網地址(floating ip在qg口使用的是給vm分配的外網地址,須要提早將fix ip和floating ip綁定),送回br-int並打上內部vlan號。
7.數據包離開br-int進入br-ex,脫掉內部vlan號,打上外網ip的vlan號。
8.最後藉助provider網絡訪問公網,此處也印證了provider網絡只能是vlan或flat類型。 插件

7、網絡節點HA

經過前文得知,整個架構的三層通訊須要藉助安裝在網絡節點的L3 Agent來完成,這樣,網絡節點在架構中就成了單點隱患,爲了解決這個問題,須要對network node作高可用,L3 Agent實現ha的方式是利用keepalive的VRRP協議提供一個vip,同時在br-int和Router上增長一個ha接口,以實現心跳傳遞,此時網絡節點的內部組件通訊以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
從部署結構來看,route namespace的接口上分別是subnet的網關地址和外網地址(或者floating ip地址),因此當使用keepalive此時網絡節點架構以下圖所示:
講清楚說明白openstack中vm流量走向之1——集中式網絡節點
至此集中網絡節點模式下vm的流量就介紹完畢。 router

相關文章
相關標籤/搜索