詳解OpenStack云平臺(tái)的網(wǎng)絡(luò)模式及其工作機(jī)制
網(wǎng)絡(luò),是OpenStack的部署中最容易出問題的,也是其結(jié)構(gòu)中難以理清的部分。經(jīng)常收到關(guān)于OneStack部署網(wǎng)絡(luò)方面問題和OpenStack網(wǎng)絡(luò)結(jié)構(gòu)問題的郵件。下面根據(jù)自己的理解,談一談OpenStack的虛擬網(wǎng)絡(luò)、網(wǎng)絡(luò)拓?fù)浜途W(wǎng)絡(luò)流。個(gè)人理解有限,僅拋磚引玉,有問題請(qǐng)指正,謝謝。
一、相關(guān)概念和要點(diǎn)(可跳過)
1、OpenStack中nova-network的作用
OpenStack平臺(tái)中有兩種類型的物理節(jié)點(diǎn),控制節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)??刂乒?jié)點(diǎn)包括網(wǎng)絡(luò)控制、調(diào)度管理、api服務(wù)、存儲(chǔ)卷管理、數(shù)據(jù)庫管理、身份管理和鏡像管理等,計(jì)算節(jié)點(diǎn)主要提供nova-compute服務(wù)??刂乒?jié)點(diǎn)的服務(wù)可以分開在多個(gè)節(jié)點(diǎn),我們把提供nova-network服務(wù)的節(jié)點(diǎn)稱為網(wǎng)絡(luò)控制器。
OpenStack的網(wǎng)絡(luò)由nova-network(網(wǎng)絡(luò)控制器)管理,它會(huì)創(chuàng)建虛擬網(wǎng)絡(luò),使主機(jī)之間以及與外部網(wǎng)絡(luò)互相訪問。
OpenStack的API服務(wù)器通過消息隊(duì)列分發(fā)nova-network提供的命令,這些命令之后會(huì)被nova-network處理,主要的操作有:分配ip地址、配置虛擬網(wǎng)絡(luò)和通信。
區(qū)分以下兩個(gè)概念:控制節(jié)點(diǎn)和網(wǎng)絡(luò)控制器
在最簡單的情況下,所有服務(wù)都部署在一個(gè)主機(jī),這就是all-in-one;
稍微復(fù)雜點(diǎn),除了nova-compute外所有服務(wù)都部署在一個(gè)主機(jī),這個(gè)主機(jī)進(jìn)行各種控制管理,因此也就是控制節(jié)點(diǎn)(本文把2個(gè)或以上節(jié)點(diǎn)的部署都稱為“多節(jié)點(diǎn)”);
但是,很多情況下(比如為了高可用性),需要把各種管理服務(wù)分別部署在不同主機(jī)(比如分別提供數(shù)據(jù)庫集群服務(wù)、消息隊(duì)列、鏡像管理、網(wǎng)絡(luò)控制等)。這個(gè)時(shí)候網(wǎng)絡(luò)控制器(運(yùn)行nova-network)只是控制節(jié)點(diǎn)群中的一部分。
2、OpenStack中network的2種ip、3種管理模式
Nova有固定IP和浮動(dòng)IP的概念。固定IP被分發(fā)到創(chuàng)建的實(shí)例不再改變,浮動(dòng)IP是一些可以和實(shí)例動(dòng)態(tài)綁定和釋放的IP地址。
Nova支持3種類型的網(wǎng)絡(luò),對(duì)應(yīng)3種“網(wǎng)絡(luò)管理”類型:Flat管理模式、FlatDHCP管理模式、VLAN管理模式。默認(rèn)使用VLAN摸式。
這3種類型的網(wǎng)絡(luò)管理模式,可以在一個(gè)ОpenStack部署里面共存,可以在不同節(jié)點(diǎn)不一樣,可以進(jìn)行多種配置實(shí)現(xiàn)高可用性。
簡要介紹這3種管理模式,后面再詳細(xì)分析。
- Flat(扁平): 所有實(shí)例橋接到同一個(gè)虛擬網(wǎng)絡(luò),需要手動(dòng)設(shè)置網(wǎng)橋。
- FlatDHCP: 與Flat(扁平)管理模式類似,這種網(wǎng)絡(luò)所有實(shí)例橋接到同一個(gè)虛擬網(wǎng)絡(luò),扁平拓?fù)?。不同的是,正如名字的區(qū)別,實(shí)例的ip提供dhcp獲取(nova-network節(jié)點(diǎn)提供dhcp服務(wù)),而且可以自動(dòng)幫助建立網(wǎng)橋。
- VLAN: 為每個(gè)項(xiàng)目提供受保護(hù)的網(wǎng)段(虛擬LAN)。
二、3種網(wǎng)絡(luò)模式的工作機(jī)制
Flat模式
1)指定一個(gè)子網(wǎng),規(guī)定虛擬機(jī)能使用的ip范圍,也就是一個(gè)ip池(
- 分配ip不會(huì)超過這個(gè)范圍,也就是配置里面的fixed_range,比如10.0.0.1/27,那么可用ip就有32個(gè);
- 這個(gè)網(wǎng)絡(luò)是可以改變的,比如配置好節(jié)點(diǎn)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)建實(shí)例時(shí),從有效ip地址池接取一個(gè)IP,為虛擬機(jī)實(shí)例分配,然后在虛擬機(jī)啟動(dòng)時(shí)候注入虛擬機(jī)鏡像(文件系統(tǒng));
3)必須手動(dòng)配置好網(wǎng)橋(br100),所有的系統(tǒng)實(shí)例都是和同一個(gè)網(wǎng)橋連接;網(wǎng)橋與連到網(wǎng)橋的實(shí)例組成一個(gè)虛擬網(wǎng)絡(luò),nova-network所在的節(jié)點(diǎn)作為默認(rèn)網(wǎng)關(guān)。比如flat_interface=eth1;eth1的ip為10.0.0.1,其它網(wǎng)絡(luò)ip在10.0.0.1/27內(nèi)。flat interface-->br100-->flat network
4)此后,網(wǎng)絡(luò)控制器(nova-network節(jié)點(diǎn))對(duì)虛擬機(jī)實(shí)例進(jìn)行NAT轉(zhuǎn)換,實(shí)現(xiàn)與外部的通信。
注意:目前好像配置注入只能夠?qū)inux類型的操作系統(tǒng)實(shí)例正常工作,網(wǎng)絡(luò)配置保存在/etc/network/interfaces文件。
Flat DHCP模式
與Flat模式一樣,從ip池取出ip分配給虛擬機(jī)實(shí)例,所有的實(shí)例都在計(jì)算節(jié)點(diǎn)中和一個(gè)網(wǎng)橋相關(guān)。不過,在這個(gè)模式里,控制節(jié)點(diǎn)做了更多一些的配置,嘗試和以太網(wǎng)設(shè)備(默認(rèn)為eth0)建立網(wǎng)橋,通過dhcp自動(dòng)為實(shí)例分配flat網(wǎng)絡(luò)的固定ip,可以回收釋放ip。
1)網(wǎng)絡(luò)控制器(運(yùn)行nova-network服務(wù)的節(jié)點(diǎn))運(yùn)行dusmasq作為DHCP服務(wù)器監(jiān)聽這個(gè)網(wǎng)橋;
2)實(shí)例做一次dhcp discover操作,發(fā)送請(qǐng)求;
3)網(wǎng)絡(luò)控制器把從一個(gè)指定的子網(wǎng)中獲得的IP地址響應(yīng)給虛擬機(jī)實(shí)例;
4)實(shí)例通過網(wǎng)絡(luò)控制器與外部實(shí)現(xiàn)互相訪問。
VLAN網(wǎng)絡(luò)模式
OpenStack的默認(rèn)網(wǎng)絡(luò)管理模式,沒有設(shè)置--network_manager=nova.network.manager.FlatDHCPManager或者FlatManager的時(shí)候默認(rèn)為vlan。為了實(shí)現(xiàn)多臺(tái)機(jī)器的安裝,VLAN網(wǎng)絡(luò)模式需要一個(gè)支持VLAN標(biāo)簽(IEEE 802.1Q)的交換機(jī)(switch)。
在這個(gè)模式里,為每個(gè)項(xiàng)目創(chuàng)建了VLAN和網(wǎng)橋。所有屬于某個(gè)項(xiàng)目的實(shí)例都會(huì)連接到同一個(gè)VLAN,必要的時(shí)候會(huì)創(chuàng)建Linux網(wǎng)橋和VLAN。
每個(gè)項(xiàng)目獲得一些只能從VLAN內(nèi)部訪問的私有IP地址,即私網(wǎng)網(wǎng)段。每個(gè)項(xiàng)目擁有它自己的VLAN,Linux網(wǎng)橋還有子網(wǎng)。被網(wǎng)絡(luò)管理員所指定的子網(wǎng)都會(huì)在需要的時(shí)候動(dòng)態(tài)地分配給一個(gè)項(xiàng)目。
1)網(wǎng)絡(luò)控制器上的DHCP服務(wù)器為所有的VLAN所啟動(dòng),從被分配到項(xiàng)目的子網(wǎng)中獲取IP地址并傳輸?shù)教摂M機(jī)實(shí)例。
2)為了實(shí)現(xiàn)用戶獲得項(xiàng)目的實(shí)例,訪問私網(wǎng)網(wǎng)段,需要?jiǎng)?chuàng)建一個(gè)特殊的VPN實(shí)例(代碼名為cloudpipe,用了創(chuàng)建整數(shù)、key和vpn訪問實(shí)例)。
3)計(jì)算節(jié)點(diǎn)為用戶生成了證明書和key,使得用戶可以訪問VPN,同時(shí)計(jì)算節(jié)點(diǎn)自動(dòng)啟動(dòng)VPN。
4)vpn訪問。
Flat與vLAN的比較
在兩種Flat模式里,網(wǎng)絡(luò)控制器扮演默認(rèn)網(wǎng)關(guān)的角色,實(shí)例都被分配了公共的IP地址(扁平式結(jié)構(gòu),都在一個(gè)橋接網(wǎng)絡(luò)里)。
vLAN模式功能豐富,很適合提供給企業(yè)內(nèi)部部署使用。但是,需要支持vLAN的switches來連接,而且相對(duì)比較復(fù)雜,在小范圍實(shí)驗(yàn)中常采用FlatDHCP模式。
三、詳解FlatDHCP模式(Flat模式類似,只是少了dhcp的部分而已,就略過了)
可以有多種部署方式,比如為了實(shí)現(xiàn)高可用性,可以使用多網(wǎng)卡、外部網(wǎng)關(guān)、multi_host 等方法。這里主要介紹基本的部署方式(一個(gè)控制節(jié)點(diǎn),或者說一個(gè)網(wǎng)絡(luò)控制器)。
1、網(wǎng)卡與節(jié)點(diǎn)
由于網(wǎng)卡和節(jié)點(diǎn)數(shù)的不同,可以簡單分為:單節(jié)點(diǎn)(all-in-one)單網(wǎng)卡、多節(jié)點(diǎn)單網(wǎng)卡、多節(jié)點(diǎn)單網(wǎng)卡、多節(jié)點(diǎn)多網(wǎng)卡
單節(jié)點(diǎn)的情況下,網(wǎng)絡(luò)控制器(運(yùn)行nova-network)與計(jì)算(運(yùn)行nova-compute,或者更確切的說,運(yùn)行虛擬機(jī)實(shí)例)部署在一個(gè)主機(jī)。這樣就不需要控制節(jié)點(diǎn)與計(jì)算節(jié)點(diǎn)之間的通信,也就少了很多網(wǎng)絡(luò)概念,這也是入門者常用的方式。
多節(jié)點(diǎn)時(shí),網(wǎng)絡(luò)控制器與計(jì)算節(jié)點(diǎn)分別在不同主機(jī),普通部署方式下(不是multi_host),只有nova-network控制網(wǎng)絡(luò),而它僅僅在控制節(jié)點(diǎn)運(yùn)行。因此,所有計(jì)算節(jié)點(diǎn)的實(shí)例都需要通過控制節(jié)點(diǎn)來與外網(wǎng)通信。
單網(wǎng)卡時(shí),網(wǎng)卡需要作為public網(wǎng)絡(luò)的接口使用,也需要作為flat網(wǎng)絡(luò)的接口,因此需要處于混雜模式。不過建立的網(wǎng)絡(luò)與雙網(wǎng)卡類似,都分為flat網(wǎng)絡(luò)和public網(wǎng)絡(luò)。
使用單網(wǎng)卡,需要在nova.conf中使public_interface和flat_interface都為eth0。
2、網(wǎng)絡(luò)流
如上面分析,在普通部署方式下,只有一個(gè)控制節(jié)點(diǎn)(或網(wǎng)絡(luò)控制器),dhcp和外網(wǎng)訪問都需要經(jīng)過它。
dhcp時(shí):
1)網(wǎng)絡(luò)控制器(運(yùn)行nova-network服務(wù)的節(jié)點(diǎn))一直運(yùn)行dusmasq作為DHCP服務(wù)器監(jiān)聽網(wǎng)橋(br100);
2)實(shí)例做一次dhcp discover操作,發(fā)送請(qǐng)求;
3)網(wǎng)絡(luò)控制器把從一個(gè)指定的子網(wǎng)中獲得的IP地址響應(yīng)給虛擬機(jī)實(shí)例。
實(shí)例訪問外網(wǎng)時(shí):
1)實(shí)例經(jīng)過所在主機(jī)的flat_interface(這是一個(gè)flat網(wǎng)絡(luò)),連接到nova-network所在的主機(jī)(控制節(jié)點(diǎn));
2)網(wǎng)絡(luò)控制器對(duì)外出網(wǎng)絡(luò)流進(jìn)行轉(zhuǎn)發(fā)。
外網(wǎng)訪問實(shí)例時(shí):
1)網(wǎng)絡(luò)控制器對(duì)floating ip進(jìn)行nat;
2)通過flat網(wǎng)絡(luò)將流入數(shù)據(jù)路由給對(duì)應(yīng)的實(shí)例。
下圖1、圖2可以比較單網(wǎng)卡和雙網(wǎng)卡的網(wǎng)絡(luò)流(traffic)情況,圖2、圖3可以比較單節(jié)點(diǎn)和多節(jié)點(diǎn)的網(wǎng)絡(luò)流。
圖1:雙網(wǎng)卡多節(jié)點(diǎn)OpenStack網(wǎng)絡(luò)流
圖2:單網(wǎng)卡多節(jié)點(diǎn)OpenStack網(wǎng)絡(luò)流
圖3:單網(wǎng)卡單節(jié)點(diǎn)OpenStack網(wǎng)絡(luò)流
3、多節(jié)點(diǎn)時(shí)控制節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)的工作原理
控制節(jié)點(diǎn):
1)在主機(jī)上創(chuàng)建一個(gè)網(wǎng)橋(br100),把網(wǎng)關(guān)ip賦給這個(gè)橋;如果已經(jīng)有ip,會(huì)自動(dòng)把這個(gè)ip賦給網(wǎng)橋作為網(wǎng)關(guān),并修復(fù)網(wǎng)關(guān);
2)建立dhcp server,監(jiān)聽這個(gè)網(wǎng)橋;并在數(shù)據(jù)庫記錄ip的分配和釋放,從而判定虛擬機(jī)釋放正常關(guān)閉dhcp;
3)監(jiān)聽到ip請(qǐng)求時(shí),從ip池取出ip,響應(yīng)這個(gè)ip給實(shí)例;
4)建立iptables規(guī)則,限制和開放與外網(wǎng)的通信或與其它服務(wù)的訪問。
計(jì)算節(jié)點(diǎn):
1)在主機(jī)上建立一個(gè)對(duì)應(yīng)控制節(jié)點(diǎn)的網(wǎng)橋(br100),把其上實(shí)例(虛擬機(jī))橋接到一個(gè)網(wǎng)絡(luò)(br100所在的網(wǎng)絡(luò));
2)此后,這個(gè)橋、控制節(jié)點(diǎn)的橋和實(shí)例的虛擬網(wǎng)卡都在同一虛擬網(wǎng)絡(luò),通過控制節(jié)點(diǎn)對(duì)外訪問。
可見,這種方式有以下特點(diǎn):
1)所有實(shí)例與外網(wǎng)通信都經(jīng)過網(wǎng)絡(luò)控制器,這也就是SPoF(單故障點(diǎn));
2)控制節(jié)點(diǎn)提供dhcp服務(wù)、nat、建立子網(wǎng),作為虛擬網(wǎng)絡(luò)的網(wǎng)關(guān);
3)計(jì)算節(jié)點(diǎn)可以沒有外網(wǎng)ip,同其上的實(shí)例一樣,可以把控制節(jié)點(diǎn)作為網(wǎng)關(guān)對(duì)外訪問;
4)實(shí)例與外網(wǎng)通信太多,會(huì)造成控制節(jié)點(diǎn)網(wǎng)絡(luò)的堵塞或者高負(fù)載。
四、VLAN模式的特點(diǎn)
VLAN模式的目的是為每個(gè)項(xiàng)目提供受保護(hù)的網(wǎng)段,具有以下特點(diǎn):
- NAT實(shí)現(xiàn)public ip
- 除了public NAT外沒有其它途徑進(jìn)入每個(gè)lan
- 受限的流出網(wǎng)絡(luò),project-admin可以控制
- 受限的項(xiàng)目之間的訪問,同樣project-admin控制
- 所以實(shí)例和api的連接通過vpn
vLAN模式了解較少,借用OpenStack文檔里的一個(gè)圖供對(duì)比了解:
圖4:VLAN模式OpenStack網(wǎng)絡(luò)結(jié)構(gòu)
五、網(wǎng)絡(luò)部署
1、網(wǎng)絡(luò)配置
apt-get install bridge-utils
安裝bridge-utils就是為了建立虛擬網(wǎng)橋,實(shí)現(xiàn)虛擬網(wǎng)絡(luò)。OpenStack會(huì)自動(dòng)的創(chuàng)建br100這個(gè)網(wǎng)橋,所以不用自己創(chuàng)建。
--network_manager=nova.network.manager.FlatDHCPManager
設(shè)置網(wǎng)絡(luò)管理模式,一般使用FlatDHCP,還可以配合multi_host實(shí)現(xiàn)高可用。
# Network Configuration --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --flat_network_bridge=br100 --flat_interface=eth1 --flat_injected=False --public_interface=eth0
dhcpbridge_flagfile指定配置文件,flat_injected實(shí)現(xiàn)ipv6地址的注入,因此關(guān)閉。
flat_network_bridge指定網(wǎng)橋。
flat_interface指定網(wǎng)卡,這個(gè)主機(jī)節(jié)點(diǎn)(一般就是控制節(jié)點(diǎn))用來建立橋,橋接實(shí)例和虛擬網(wǎng)絡(luò)以及public網(wǎng)絡(luò)。單網(wǎng)卡是設(shè)為eth0,與public的同一個(gè)。
#Block of IP addresses that are fixed IPs --fixed_range=10.0.0.1/27
指定ip池的范圍,文中多次提到的從指定的ip池取出ip分配給實(shí)例,就是這個(gè)ip池。
2、OpenStack中網(wǎng)絡(luò)的高可用性(HA)
在基本的網(wǎng)絡(luò)管理方式中,所有實(shí)例的網(wǎng)絡(luò)流都要經(jīng)過網(wǎng)絡(luò)控制器。當(dāng)網(wǎng)絡(luò)控制器出現(xiàn)問題時(shí),網(wǎng)絡(luò)就出現(xiàn)故障,網(wǎng)絡(luò)控制器是一個(gè)SPoF(單故障點(diǎn))?!稑?gòu)建OpenStack的高可用性(HA,High Availability)》簡單介紹了4種方法和未來的Quantum。
主要的部署方式是FlagDHCP + multi_host:
1)、每個(gè)計(jì)算節(jié)點(diǎn)安裝nova-network,設(shè)置multi_host為true。這樣,每個(gè)計(jì)算節(jié)點(diǎn)上flat_interface作為網(wǎng)橋,提供dhcp、dns,作為其上所有實(shí)例的網(wǎng)關(guān)(gateway)。實(shí)例不再都從控制節(jié)點(diǎn)經(jīng)過,控制節(jié)點(diǎn)出現(xiàn)問題不會(huì)影響網(wǎng)絡(luò)。
2)、每個(gè)計(jì)算節(jié)點(diǎn)的flat_interface提供switch連接,實(shí)現(xiàn)實(shí)例之間的虛擬網(wǎng)絡(luò)的傳輸和通信。
3)、每個(gè)計(jì)算節(jié)點(diǎn)有個(gè)public_interface,與外網(wǎng)連接。
4)、為每個(gè)實(shí)例分配floating ip,作為實(shí)例的第二個(gè)虛擬ip,與外網(wǎng)通信。
也就是發(fā)生了如下的變化:
圖5:multi_host部署方式時(shí)的OpenStack網(wǎng)絡(luò)流
未來的Quantum和Melarge提供更好的網(wǎng)絡(luò)服務(wù),值得期待。Quantum項(xiàng)目實(shí)現(xiàn)二層網(wǎng)絡(luò)相關(guān)的功能,如創(chuàng)建和管理虛擬網(wǎng)絡(luò)、端口等。Melange負(fù)責(zé)三層網(wǎng)絡(luò)相關(guān),它的主要任務(wù)是IP地址管理(IPAM)、DHCP、NAT甚至負(fù)載均衡。不過由于其實(shí)現(xiàn)需要一定的時(shí)間,需要多個(gè)階段,現(xiàn)在還是需要了解以上的各種網(wǎng)絡(luò)模式和部署。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
OpenStack 工作流workflows使用原理詳細(xì)介紹
這篇文章主要介紹了OpenStack 工作流workflows使用原理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11簡單談?wù)凮penStack中的網(wǎng)絡(luò)隔離
這篇文章主要介紹了簡單談?wù)凮penStack中的網(wǎng)絡(luò)隔離的相關(guān)資料,需要的朋友可以參考下2017-03-03什么是OpenStack 開源的云計(jì)算管理平臺(tái)項(xiàng)目
OpenStack是一個(gè)開源的云計(jì)算管理平臺(tái)項(xiàng)目,由幾個(gè)主要的組件組合起來完成具體工作。OpenStack支持幾乎所有類型的云環(huán)境,項(xiàng)目目標(biāo)是提供實(shí)施簡單、可大規(guī)模擴(kuò)展、豐富、標(biāo)準(zhǔn)統(tǒng)一的云計(jì)算管理平臺(tái)2016-11-11Openstack 使用migrate進(jìn)行數(shù)據(jù)庫升級(jí)實(shí)現(xiàn)方案詳細(xì)介紹
這篇文章主要介紹了Openstack 使用migrate進(jìn)行數(shù)據(jù)庫升級(jí)詳細(xì)介紹的相關(guān)資料,數(shù)據(jù)庫表或者增加字段等是必然的事情,如何比較容易的進(jìn)行這些數(shù)據(jù)庫升級(jí)的適配和管理,這里提供實(shí)現(xiàn)方法,需要的朋友可以參考下2016-12-12OpenStack Heat AutoScaling詳解及實(shí)例代碼
這篇文章主要介紹了OpenStack Heat AutoScaling詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12OpenStack之虛機(jī)熱遷移的代碼詳細(xì)解析
本篇文章主要介紹了OpenStack之虛機(jī)熱遷移,有需要的朋友可以了解下。2016-11-11openstack 虛擬機(jī)配置VIP的實(shí)現(xiàn)步驟
本文主要介紹了openstack 虛擬機(jī)配置VIP的實(shí)現(xiàn)步驟,包括查詢可用子網(wǎng)、創(chuàng)建VIP地址、綁定VIP到虛擬機(jī)端口等,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01openstack云計(jì)算keystone架構(gòu)源碼分析
這篇文章主要為大家介紹了openstack云計(jì)算keystone架構(gòu)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04