OpenStack云平臺的網(wǎng)絡模式及其工作機制是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答鹅龄,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
網(wǎng)絡亭畜,是OpenStack的部署中最容易出問題的扮休,也是其結構中難以理清的部分。經(jīng)常收到關于OneStack部署網(wǎng)絡方面問題和OpenStack網(wǎng)絡結構問題的郵件拴鸵。下面根據(jù)自己的理解玷坠,談一談OpenStack的虛擬網(wǎng)絡蜗搔、網(wǎng)絡拓撲和網(wǎng)絡流。個人理解有限八堡,僅拋磚引玉樟凄,有問題請指正,謝謝兄渺。
一缝龄、相關概念和要點(可跳過)
1、OpenStack中nova-network的作用
OpenStack平臺中有兩種類型的物理節(jié)點溶耘,控制節(jié)點和計算節(jié)點二拐。控制節(jié)點包括網(wǎng)絡控制凳兵、調(diào)度管理百新、api服務、存儲卷管理庐扫、數(shù)據(jù)庫管理饭望、身份管理和鏡像管理等,計算節(jié)點主要提供nova-compute服務形庭∏Υ牵控制節(jié)點的服務可以分開在多個節(jié)點,我們把提供nova-network服務的節(jié)點稱為網(wǎng)絡控制器萨醒。
OpenStack的網(wǎng)絡由nova-network(網(wǎng)絡控制器)管理斟珊,它會創(chuàng)建虛擬網(wǎng)絡,使主機之間以及與外部網(wǎng)絡互相訪問富纸。
OpenStack的API服務器通過消息隊列分發(fā)nova-network提供的命令囤踩,這些命令之后會被nova-network處理,主要的操作有:分配ip地址晓褪、配置虛擬網(wǎng)絡和通信堵漱。
區(qū)分以下兩個概念:控制節(jié)點和網(wǎng)絡控制器
在最簡單的情況下,所有服務都部署在一個主機涣仿,這就是all-in-one勤庐;
稍微復雜點,除了nova-compute外所有服務都部署在一個主機好港,這個主機進行各種控制管理愉镰,因此也就是控制節(jié)點(本文把2個或以上節(jié)點的部署都稱為“多節(jié)點”);
但是钧汹,很多情況下(比如為了高可用性)岛杀,需要把各種管理服務分別部署在不同主機(比如分別提供數(shù)據(jù)庫集群服務、消息隊列崭孤、鏡像管理类嗤、網(wǎng)絡控制等)。這個時候網(wǎng)絡控制器(運行nova-network)只是控制節(jié)點群中的一部分辨宠。
2遗锣、OpenStack中network的2種ip、3種管理模式
Nova有固定IP和浮動IP的概念嗤形。固定IP被分發(fā)到創(chuàng)建的實例不再改變精偿,浮動IP是一些可以和實例動態(tài)綁定和釋放的IP地址。
Nova支持3種類型的網(wǎng)絡赋兵,對應3種“網(wǎng)絡管理”類型:Flat管理模式笔咽、FlatDHCP管理模式、VLAN管理模式霹期。默認使用VLAN摸式叶组。
這3種類型的網(wǎng)絡管理模式,可以在一個ОpenStack部署里面共存历造,可以在不同節(jié)點不一樣甩十,可以進行多種配置實現(xiàn)高可用性。
簡要介紹這3種管理模式吭产,后面再詳細分析侣监。
Flat(扁平): 所有實例橋接到同一個虛擬網(wǎng)絡,需要手動設置網(wǎng)橋臣淤。
FlatDHCP: 與Flat(扁平)管理模式類似橄霉,這種網(wǎng)絡所有實例橋接到同一個虛擬網(wǎng)絡,扁平拓撲邑蒋。不同的是姓蜂,正如名字的區(qū)別,實例的ip提供dhcp獲人露(nova-network節(jié)點提供dhcp服務)覆糟,而且可以自動幫助建立網(wǎng)橋。
VLAN: 為每個項目提供受保護的網(wǎng)段(虛擬LAN)遮咖。
二滩字、3種網(wǎng)絡模式的工作機制
Flat模式
1)指定一個子網(wǎng),規(guī)定虛擬機能使用的ip范圍御吞,也就是一個ip池(
分配ip不會超過這個范圍麦箍,也就是配置里面的fixed_range,比如10.0.0.1/27陶珠,那么可用ip就有32個挟裂;
這個網(wǎng)絡是可以改變的,比如配置好節(jié)點nova.conf和interfaces后揍诽,nova-manage network delete 10.0.0.1/27 1 32诀蓉;nova-manage network create192.168.1.0/24 1 255
2)創(chuàng)建實例時栗竖,從有效ip地址池接取一個IP,為虛擬機實例分配渠啤,然后在虛擬機啟動時候注入虛擬機鏡像(文件系統(tǒng))狐肢;
3)必須手動配置好網(wǎng)橋(br100),所有的系統(tǒng)實例都是和同一個網(wǎng)橋連接沥曹;網(wǎng)橋與連到網(wǎng)橋的實例組成一個虛擬網(wǎng)絡份名,nova-network所在的節(jié)點作為默認網(wǎng)關。比如flat_interface=eth2;eth2的ip為10.0.0.1妓美,其它網(wǎng)絡ip在10.0.0.1/27內(nèi)僵腺。flat interface-->br100-->flat network
4)此后,網(wǎng)絡控制器(nova-network節(jié)點)對虛擬機實例進行NAT轉換壶栋,實現(xiàn)與外部的通信辰如。
注意:目前好像配置注入只能夠?qū)inux類型的操作系統(tǒng)實例正常工作,網(wǎng)絡配置保存在/etc/network/interfaces文件委刘。
Flat DHCP模式
與Flat模式一樣丧没,從ip池取出ip分配給虛擬機實例,所有的實例都在計算節(jié)點中和一個網(wǎng)橋相關锡移。不過呕童,在這個模式里,控制節(jié)點做了更多一些的配置淆珊,嘗試和以太網(wǎng)設備(默認為eth0)建立網(wǎng)橋夺饲,通過dhcp自動為實例分配flat網(wǎng)絡的固定ip,可以回收釋放ip施符。
1)網(wǎng)絡控制器(運行nova-network服務的節(jié)點)運行dusmasq作為DHCP服務器監(jiān)聽這個網(wǎng)橋往声;
2)實例做一次dhcp discover操作,發(fā)送請求戳吝;
3)網(wǎng)絡控制器把從一個指定的子網(wǎng)中獲得的IP地址響應給虛擬機實例浩销;
4)實例通過網(wǎng)絡控制器與外部實現(xiàn)互相訪問。
VLAN網(wǎng)絡模式
OpenStack的默認網(wǎng)絡管理模式听哭,沒有設置--network_manager=nova.network.manager.FlatDHCPManager或者FlatManager的時候默認為vlan慢洋。為了實現(xiàn)多臺機器的安裝,VLAN網(wǎng)絡模式需要一個支持VLAN標簽(IEEE 802.1Q)的交換機(switch)陆盘。
在這個模式里普筹,為每個項目創(chuàng)建了VLAN和網(wǎng)橋。所有屬于某個項目的實例都會連接到同一個VLAN隘马,必要的時候會創(chuàng)建Linux網(wǎng)橋和VLAN太防。
每個項目獲得一些只能從VLAN內(nèi)部訪問的私有IP地址,即私網(wǎng)網(wǎng)段酸员。每個項目擁有它自己的VLAN蜒车,Linux網(wǎng)橋還有子網(wǎng)讳嘱。被網(wǎng)絡管理員所指定的子網(wǎng)都會在需要的時候動態(tài)地分配給一個項目。
1)網(wǎng)絡控制器上的DHCP服務器為所有的VLAN所啟動醇王,從被分配到項目的子網(wǎng)中獲取IP地址并傳輸?shù)教摂M機實例呢燥。
2)為了實現(xiàn)用戶獲得項目的實例,訪問私網(wǎng)網(wǎng)段寓娩,需要創(chuàng)建一個特殊的VPN實例(代碼名為cloudpipe,用了創(chuàng)建整數(shù)呼渣、key和vpn訪問實例)棘伴。
3)計算節(jié)點為用戶生成了證明書和key,使得用戶可以訪問VPN屁置,同時計算節(jié)點自動啟動VPN焊夸。
4)vpn訪問。
Flat與vLAN的比較
在兩種Flat模式里蓝角,網(wǎng)絡控制器扮演默認網(wǎng)關的角色阱穗,實例都被分配了公共的IP地址(扁平式結構,都在一個橋接網(wǎng)絡里)使鹅。
vLAN模式功能豐富揪阶,很適合提供給企業(yè)內(nèi)部部署使用。但是患朱,需要支持vLAN的switches來連接鲁僚,而且相對比較復雜,在小范圍實驗中常采用FlatDHCP模式裁厅。
三冰沙、詳解FlatDHCP模式(Flat模式類似,只是少了dhcp的部分而已执虹,就略過了)
可以有多種部署方式拓挥,比如為了實現(xiàn)高可用性,可以使用多網(wǎng)卡袋励、外部網(wǎng)關侥啤、multi_host 等方法。這里主要介紹基本的部署方式(一個控制節(jié)點插龄,或者說一個網(wǎng)絡控制器)愿棋。
1、網(wǎng)卡與節(jié)點
由于網(wǎng)卡和節(jié)點數(shù)的不同均牢,可以簡單分為:單節(jié)點(all-in-one)單網(wǎng)卡糠雨、多節(jié)點單網(wǎng)卡、多節(jié)點單網(wǎng)卡徘跪、多節(jié)點多網(wǎng)卡
單節(jié)點的情況下甘邀,網(wǎng)絡控制器(運行nova-network)與計算(運行nova-compute琅攘,或者更確切的說,運行虛擬機實例)部署在一個主機松邪。這樣就不需要控制節(jié)點與計算節(jié)點之間的通信坞琴,也就少了很多網(wǎng)絡概念,這也是入門者常用的方式逗抑。
多節(jié)點時剧辐,網(wǎng)絡控制器與計算節(jié)點分別在不同主機,普通部署方式下(不是multi_host)邮府,只有nova-network控制網(wǎng)絡荧关,而它僅僅在控制節(jié)點運行。因此褂傀,所有計算節(jié)點的實例都需要通過控制節(jié)點來與外網(wǎng)通信忍啤。
單網(wǎng)卡時,網(wǎng)卡需要作為public網(wǎng)絡的接口使用仙辟,也需要作為flat網(wǎng)絡的接口同波,因此需要處于混雜模式。不過建立的網(wǎng)絡與雙網(wǎng)卡類似叠国,都分為flat網(wǎng)絡和public網(wǎng)絡未檩。
使用單網(wǎng)卡,需要在nova.conf中使public_interface和flat_interface都為eth0煎饼。
2讹挎、網(wǎng)絡流
如上面分析,在普通部署方式下吆玖,只有一個控制節(jié)點(或網(wǎng)絡控制器)筒溃,dhcp和外網(wǎng)訪問都需要經(jīng)過它。
dhcp時:
1)網(wǎng)絡控制器(運行nova-network服務的節(jié)點)一直運行dusmasq作為DHCP服務器監(jiān)聽網(wǎng)橋(br100)沾乘;
2)實例做一次dhcp discover操作怜奖,發(fā)送請求;
3)網(wǎng)絡控制器把從一個指定的子網(wǎng)中獲得的IP地址響應給虛擬機實例翅阵。
實例訪問外網(wǎng)時:
1)實例經(jīng)過所在主機的flat_interface(這是一個flat網(wǎng)絡)歪玲,連接到nova-network所在的主機(控制節(jié)點);
2)網(wǎng)絡控制器對外出網(wǎng)絡流進行轉發(fā)掷匠。
外網(wǎng)訪問實例時:
1)網(wǎng)絡控制器對floating ip進行nat滥崩;
2)通過flat網(wǎng)絡將流入數(shù)據(jù)路由給對應的實例。
下圖1讹语、圖2可以比較單網(wǎng)卡和雙網(wǎng)卡的網(wǎng)絡流(traffic)情況钙皮,圖2、圖3可以比較單節(jié)點和多節(jié)點的網(wǎng)絡流。
圖1:雙網(wǎng)卡多節(jié)點OpenStack網(wǎng)絡流
圖3:單網(wǎng)卡單節(jié)點OpenStack網(wǎng)絡流
3短条、多節(jié)點時控制節(jié)點和計算節(jié)點的工作原理
控制節(jié)點:
1)在主機上創(chuàng)建一個網(wǎng)橋(br100)导匣,把網(wǎng)關ip賦給這個橋;如果已經(jīng)有ip茸时,會自動把這個ip賦給網(wǎng)橋作為網(wǎng)關贡定,并修復網(wǎng)關;
2)建立dhcp server可都,監(jiān)聽這個網(wǎng)橋缓待;并在數(shù)據(jù)庫記錄ip的分配和釋放,從而判定虛擬機釋放正常關閉dhcp汹粤;
3)監(jiān)聽到ip請求時命斧,從ip池取出ip,響應這個ip給實例嘱兼;
4)建立iptables規(guī)則,限制和開放與外網(wǎng)的通信或與其它服務的訪問贤徒。
計算節(jié)點:
1)在主機上建立一個對應控制節(jié)點的網(wǎng)橋(br100)芹壕,把其上實例(虛擬機)橋接到一個網(wǎng)絡(br100所在的網(wǎng)絡);
2)此后接奈,這個橋踢涌、控制節(jié)點的橋和實例的虛擬網(wǎng)卡都在同一虛擬網(wǎng)絡,通過控制節(jié)點對外訪問序宦。
可見睁壁,這種方式有以下特點:
1)所有實例與外網(wǎng)通信都經(jīng)過網(wǎng)絡控制器,這也就是SPoF(單故障點)互捌;
2)控制節(jié)點提供dhcp服務潘明、nat、建立子網(wǎng)秕噪,作為虛擬網(wǎng)絡的網(wǎng)關钳降;
3)計算節(jié)點可以沒有外網(wǎng)ip,同其上的實例一樣腌巾,可以把控制節(jié)點作為網(wǎng)關對外訪問遂填;
4)實例與外網(wǎng)通信太多,會造成控制節(jié)點網(wǎng)絡的堵塞或者高負載澈蝙。
四吓坚、VLAN模式的特點
VLAN模式的目的是為每個項目提供受保護的網(wǎng)段,具有以下特點:
NAT實現(xiàn)public ip
除了public NAT外沒有其它途徑進入每個lan
受限的流出網(wǎng)絡灯荧,project-admin可以控制
受限的項目之間的訪問礁击,同樣project-admin控制
所以實例和api的連接通過vpn
vLAN模式了解較少,借用OpenStack文檔里的一個圖供對比了解:
need-to-insert-img
圖4:VLAN模式OpenStack網(wǎng)絡結構
五、網(wǎng)絡部署
1客税、網(wǎng)絡配置
apt-get install bridge-utils
安裝bridge-utils就是為了建立虛擬網(wǎng)橋况褪,實現(xiàn)虛擬網(wǎng)絡。OpenStack會自動的創(chuàng)建br100這個網(wǎng)橋更耻,所以不用自己創(chuàng)建测垛。
--network_manager=nova.network.manager.FlatDHCPManager
設置網(wǎng)絡管理模式,一般使用FlatDHCP秧均,還可以配合multi_host實現(xiàn)高可用食侮。
#?Network?Configuration--dhcpbridge_flagfile=/etc/nova/nova.conf--dhcpbridge=/usr/bin/nova-dhcpbridge--flat_network_bridge=br100--flat_interface=eth2--flat_injected=False--public_interface=eth0
dhcpbridge_flagfile指定配置文件,flat_injected實現(xiàn)ipv6地址的注入目胡,因此關閉锯七。
flat_network_bridge指定網(wǎng)橋。
flat_interface指定網(wǎng)卡誉己,這個主機節(jié)點(一般就是控制節(jié)點)用來建立橋眉尸,橋接實例和虛擬網(wǎng)絡以及public網(wǎng)絡。單網(wǎng)卡是設為eth0巨双,與public的同一個噪猾。
#Block?of?IP?addresses?that?are?fixed?IPs--fixed_range=10.0.0.1/27
指定ip池的范圍袱蜡,文中多次提到的從指定的ip池取出ip分配給實例,就是這個ip池敏晤。
2、OpenStack中網(wǎng)絡的高可用性(HA)
在基本的網(wǎng)絡管理方式中,所有實例的網(wǎng)絡流都要經(jīng)過網(wǎng)絡控制器扶平。當網(wǎng)絡控制器出現(xiàn)問題時,網(wǎng)絡就出現(xiàn)故障,網(wǎng)絡控制器是一個SPoF(單故障點)。《構建OpenStack的高可用性(HA惑惶,High Availability)》簡單介紹了4種方法和未來的Quantum香到。
主要的部署方式是FlagDHCP + multi_host:
1)雷绢、每個計算節(jié)點安裝nova-network蔽氨,設置multi_host為true宇立。這樣,每個計算節(jié)點上flat_interface作為網(wǎng)橋润脸,提供dhcp、dns,作為其上所有實例的網(wǎng)關(gateway)骤宣。實例不再都從控制節(jié)點經(jīng)過展运,控制節(jié)點出現(xiàn)問題不會影響網(wǎng)絡蔗候。
2)、每個計算節(jié)點的flat_interface提供switch連接,實現(xiàn)實例之間的虛擬網(wǎng)絡的傳輸和通信。
3)、每個計算節(jié)點有個public_interface,與外網(wǎng)連接。
4)、為每個實例分配floating ip,作為實例的第二個虛擬ip,與外網(wǎng)通信。
也就是發(fā)生了如下的變化:
圖5:multi_host部署方式時的OpenStack網(wǎng)絡流
未來的Quantum和Melarge提供更好的網(wǎng)絡服務,值得期待奋救。Quantum項目實現(xiàn)二層網(wǎng)絡相關的功能岭参,如創(chuàng)建和管理虛擬網(wǎng)絡、端口等尝艘。Melange負責三層網(wǎng)絡相關演侯,它的主要任務是IP地址管理(IPAM)、DHCP背亥、NAT甚至負載均衡秒际。不過由于其實現(xiàn)需要一定的時間,需要多個階段狡汉,現(xiàn)在還是需要了解以上的各種網(wǎng)絡模式和部署娄徊。