一、相關概念和要點
1、OpenStack中nova-network的作用
OpenStack平台中有兩種 類型的物理節點,控制節點和計算節點。控制節點包括網絡控制、調度管理、api服務、存儲卷管理、
數據庫管理、身份管理和鏡像管理等,計算節點主要提供 nova-compute服務。控制節點的服務可以分開在多個節點,我們把提供nova-network服務的節點稱為網絡控制器。
OpenStack的網絡由nova-network(網絡控制器)管理,它會創建虛擬網絡,使主機之間以及與外部網絡互相訪問。
OpenStack的API服務器通過消息隊列分發nova-network提供的命令,這些命令之後會被nova-network處理,主要的操作有:分配ip地址、配置虛擬網絡和通信。
區分以下兩個概念:控制節點和網絡控制器
在最簡單的情況下,所有服務都部署在一個主機,這就是all-in-one;
稍微復雜點,除了nova-compute外所有服務都部署在一個主機,這個主機進行各種控制管理,因此也就是控制節點(本文把2個或以上節點的部署都稱為“多節點”);
但是,很多情況下(比如為了高可用性),需要把各種管理服務分別部署在不同主機(比如分別提供數據庫集群服務、消息隊列、鏡像管理、網絡控制等)。這個時候網絡控制器(運行nova-network)只是控制節點群中的一部分。
2、OpenStack中network的2種ip、3種管理模式
Nova有固定IP和浮動IP的概念。固定IP被分發到創建的實例不再改變,浮動IP是一些可以和實例動態綁定和釋放的IP地址。
Nova支持3種類型的網絡,對應3種“網絡管理”類型:Flat管理模式、FlatDHCP管理模式、VLAN管理模式。默認使用VLAN摸式。
這3種類型的網絡管理模式,可以在一個ОpenStack部署裡面共存,可以在不同節點不一樣,可以進行多種配置實現高可用性。
簡要介紹這3種管理模式,後面再詳細分析。
-
Flat(扁平): 所有實例橋接到同一個虛擬網絡,需要手動設置網橋。
-
FlatDHCP: 與Flat(扁平)管理模式類似,這種網絡所有實例橋接到同一個虛擬網絡,扁平拓撲。不同的是,正如名字的區別,實例的ip提供dhcp獲取(nova-network節點提供dhcp服務),而且可以自動幫助建立網橋。
-
VLAN: 為每個項目提供受保護的網段(虛擬LAN)。
二、3種網絡模式的工作機制
•Flat模式
1)指定一個子網,規定虛擬機能使用的ip范圍,也就是一個ip池(
-
分配ip不會超過這個范圍,也就是配置裡面的fixed_range,比如10.0.0.1/27,那麼可用ip就有32個;
-
這個網絡是可以改變的,比如配置好節點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)創建實例時,從有效ip地址池接取一個IP,為虛擬機實例分配,然後在虛擬機啟動時候注入虛擬機鏡像(文件系統);
3) 必須手動配置好網橋(br100),所有的系統實例都是和同一個網橋連接;網橋與連到網橋的實例組成一個虛擬網絡,nova-network所在的節點作 為默認網關。比如flat_interface=eth1;eth1的ip為10.0.0.1,其它網絡ip在10.0.0.1/27內。flat interface-->br100-->flat network
4)此後,網絡控制器(nova-network節點)對虛擬機實例進行NAT轉換,實現與外部的通信。
注意:目前好像配置注入只能夠對
Linux類型的操作系統實例正常工作,網絡配置保存在/etc/network/interfaces文件。
•Flat DHCP模式
與Flat模式一樣,從ip池取出ip分配給虛擬機實例,所有的實例都在計算節點中和一個網橋相關。不過,在這個模式裡,控制節點做了更多一些的配置,嘗試和以太網設備(默認為eth0)建立網橋,通過dhcp自動為實例分配flat網絡的固定ip,可以回收釋放ip。
1)網絡控制器(運行nova-network服務的節點)運行dusmasq作為DHCP服務器監聽這個網橋;
2)實例做一次dhcp discover操作,發送請求;
3)網絡控制器把從一個指定的子網中獲得的IP地址響應給虛擬機實例;
4)實例通過網絡控制器與外部實現互相訪問。
•VLAN網絡模式
OpenStack 的默認網絡管理模式,沒有設置--network_manager=nova.network.manager.FlatDHCPManager或者 FlatManager的時候默認為vlan。為了實現多台機器的安裝,VLAN網絡模式需要一個支持VLAN標簽(IEEE 802.1Q)的交換機(switch)。
在這個模式裡,為每個項目創建了VLAN和網橋。所有屬於某個項目的實例都會連接到同一個VLAN,必要的時候會創建Linux網橋和VLAN。
每個項目獲得一些只能從VLAN內部訪問的私有IP地址,即私網網段。每個項目擁有它自己的VLAN,Linux網橋還有子網。被網絡管理員所指定的子網都會在需要的時候動態地分配給一個項目。
1)網絡控制器上的DHCP服務器為所有的VLAN所啟動,從被分配到項目的子網中獲取IP地址並傳輸到虛擬機實例。
2)為了實現用戶獲得項目的實例,訪問私網網段,需要創建一個特殊的VPN實例(代碼名為cloudpipe,用了創建整數、key和vpn訪問實例)。
3)計算節點為用戶生成了證明書和key,使得用戶可以訪問VPN,同時計算節點自動啟動VPN。
4)vpn訪問。
Flat與vLAN的比較
在兩種Flat模式裡,網絡控制器扮演默認網關的角色,實例都被分配了公共的IP地址(扁平式結構,都在一個橋接網絡裡)。
vLAN模式功能豐富,很適合提供給企業內部部署使用。但是,需要支持vLAN的switches來連接,而且相對比較復雜,在小范圍實驗中常采用FlatDHCP模式。
三、詳解FlatDHCP模式(Flat模式類似,只是少了dhcp的部分而已,就略過了)
可以有多種部署方式,比如為了實現高可用性,可以使用多網卡、外部網關、multi_host 等方法。這裡主要介紹基本的部署方式(一個控制節點,或者說一個網絡控制器)。
1、網卡與節點
由於網卡和節點數的不同,可以簡單分為:單節點(all-in-one)單網卡、多節點單網卡、多節點單網卡、多節點多網卡
單節點的情況下,網絡控制器(運行nova-network)與計算(運行nova-compute,或者更確切的說,運行虛擬機實例)部署在一個主機。這樣就不需要控制節點與計算節點之間的通信,也就少了很多網絡概念,這也是入門者常用的方式。
多節點時,網絡控制器與計算節點分別在不同主機,普通部署方式下(不是multi_host),只有nova-network控制網絡,而它僅僅在控制節點運行。因此,所有計算節點的實例都需要通過控制節點來與外網通信。
單網卡時,網卡需要作為public網絡的接口使用,也需要作為flat網絡的接口,因此需要處於混雜模式。不過建立的網絡與雙網卡類似,都分為flat網絡和public網絡。
使用單網卡,需要在nova.conf中使public_interface和flat_interface都為eth0。
2、網絡流
如上面分析,在普通部署方式下,只有一個控制節點(或網絡控制器),dhcp和外網訪問都需要經過它。
dhcp時:
1)網絡控制器(運行nova-network服務的節點)一直運行dusmasq作為DHCP服務器監聽網橋(br100);
2)實例做一次dhcp discover操作,發送請求;
3)網絡控制器把從一個指定的子網中獲得的IP地址響應給虛擬機實例。
實例訪問外網時:
1)實例經過所在主機的flat_interface(這是一個flat網絡),連接到nova-network所在的主機(控制節點);
2)網絡控制器對外出網絡流進行轉發。
外網訪問實例時:
1)網絡控制器對floating ip進行nat;
2)通過flat網絡將流入數據路由給對應的實例。
下圖1、圖2可以比較單網卡和雙網卡的網絡流(traffic)情況,圖2、圖3可以比較單節點和多節點的網絡流。
圖1:雙網卡多節點OpenStack網絡流
圖2:單網卡多節點OpenStack網絡流
圖3:單網卡單節點OpenStack網絡流
3、多節點時控制節點和計算節點的工作原理
控制節點:
1)在主機上創建一個網橋(br100),把網關ip賦給這個橋;如果已經有ip,會自動把這個ip賦給網橋作為網關,並修復網關;
2)建立dhcp server,監聽這個網橋;並在數據庫記錄ip的分配和釋放,從而判定虛擬機釋放正常關閉dhcp;
3)監聽到ip請求時,從ip池取出ip,響應這個ip給實例;
4)建立iptables規則,限制和開放與外網的通信或與其它服務的訪問。
計算節點:
1)在主機上建立一個對應控制節點的網橋(br100),把其上實例(虛擬機)橋接到一個網絡(br100所在的網絡);
2)此後,這個橋、控制節點的橋和實例的虛擬網卡都在同一虛擬網絡,通過控制節點對外訪問。
可見,這種方式有以下特點:
1)所有實例與外網通信都經過網絡控制器,這也就是SPoF(單故障點);
2)控制節點提供dhcp服務、nat、建立子網,作為虛擬網絡的網關;
3)計算節點可以沒有外網ip,同其上的實例一樣,可以把控制節點作為網關對外訪問;
4)實例與外網通信太多,會造成控制節點網絡的堵塞或者高負載。
四、VLAN模式的特點
VLAN模式的目的是為每個項目提供受保護的網段,具有以下特點:
-
NAT實現public ip
-
除了public NAT外沒有其它途徑進入每個lan
-
受限的流出網絡,project-admin可以控制
-
受限的項目之間的訪問,同樣project-admin控制
-
所以實例和api的連接通過vpn
vLAN模式了解較少,借用OpenStack文檔裡的一個圖供對比了解:
圖4:VLAN模式OpenStack網絡結構
五、網絡部署
1、網絡配置
apt-get install bridge-utils
安裝bridge-utils就是為了建立虛擬網橋,實現虛擬網絡。OpenStack會自動的創建br100這個網橋,所以不用自己創建。
--network_manager=nova.network.manager.FlatDHCPManager
設置網絡管理模式,一般使用FlatDHCP,還可以配合multi_host實現高可用。
# Network Configuration
--dhcpbridge_flag
file=/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實現ipv6地址的注入,因此關閉。
flat_network_bridge指定網橋。
flat_interface指定網卡,這個主機節點(一般就是控制節點)用來建立橋,橋接實例和虛擬網絡以及public網絡。單網卡是設為eth0,與public的同一個。
#Block of IP addresses that are fixed IPs
--fixed_range=10.0.0.1/27
指定ip池的范圍,文中多次提到的從指定的ip池取出ip分配給實例,就是這個ip池。
2、OpenStack中網絡的高可用性(HA)
在 基本的網絡管理方式中,所有實例的網絡流都要經過網絡控制器。當網絡控制器出現問題時,網絡就出現故障,網絡控制器是一個SPoF(單故障點)。《構建 OpenStack的高可用性(HA,High Availability)》簡單介紹了4種方法和未來的Quantum。
主要的部署方式是FlagDHCP + multi_host:
1) 每個計算節點安裝nova-network,設置multi_host為true。這樣,每個計算節點上flat_interface作為網橋,提供 dhcp、dns,作為其上所有實例的網關(gateway)。實例不再都從控制節點經過,控制節點出現問題不會影響網絡。
2)每個計算節點的flat_interface提供switch連接,實現實例之間的虛擬網絡的傳輸和通信。
3)每個計算節點有個public_interface,與外網連接。
4)為每個實例分配floating ip,作為實例的第二個虛擬ip,與外網通信。
也就是發生了如下的變化:
圖5:multi_host部署方式時的OpenStack網絡流
未來的Quantum和Melarge提供更好的網絡服務,值得期待。Quantum項目實現二層網絡相關的功能,如創建和管理虛擬網絡、端口等。 Melange負責三層網絡相關,它的主要任務是IP地址管理(IPAM)、DHCP、NAT甚至負載均衡。不過由於其實現需要一定的時間,需要多個階 段,現在還是需要了解以上的各種網絡模式和部署。