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

一、背景介紹

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

二、網絡節點功能

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

三、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時,此時的流量稱爲南北走向。

四、網絡節點內部組件

相對於計算機點,網絡節點中多了租戶的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的東西和南北流量走向。

五、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和vm2的網關配置在此路由器接口qr上。
8.數據包在此路由器上完成地址轉換,送回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。

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。

六、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類型。

七、網絡節點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的流量就介紹完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章