1. nova network簡介
網絡管理和配置是雲計算中一項非常重要的功能。nova自帶的nova-network實現了一些基本的網絡模型,允許虛擬機之間的相互通信及虛擬機對internet的訪問。歸納的來講nova network的主要功能有:
-
網絡模型:nova network實現了三種網絡模型,允許管理員根據自己的需要進行組網,讓虛擬機之間可以相互通信。這三種模式分別是:flat、flatdhcp、vlan,后面會對這三種模型進行更加詳細的介紹。
-
IP地址管理:nova network需要管理虛擬機使用的IP地址,這些地址包含兩類,一類是fixed ip,在虛擬機的整個生命周期中該IP地址都不會發生變化;另一類是floating ip,是動態的分配給虛擬機的,隨時都可以收回。
-
dhcp功能:在flatdhcp和vlan模式下,虛擬機是通過DHCP來獲取其fixed ip的;nova network會啟動dnsmasq作為虛擬機的DHCP服務器,該虛擬機分配ip。
-
安全防護:出於安全的考慮,nova中的虛擬機可以防止IP/MAC洪泛,不能隨便修改虛擬機的MAC地址,修改后虛擬機就不能上網了,這項功能主要是通過ebtables/iptables實現的。
下面簡單的介紹下nova network的三種網絡模型。
在這三種模型中flat是最簡單的,nova的操作也最少,相關的配置需要管理員事先配置好。在flat模式下,管理員需要手動創建一個網橋,所有的虛擬機都會關聯到該網橋,所有的虛擬機也都處於同一個子網下,虛擬機的fixed ip都是從該子網分配,而且網絡相關的配置信息會在虛擬機啟動時注入到虛擬機鏡像中。
flatdhcp模式與flat比較接近,但nova會自動創建網橋,維護已經分配的floating ip,並啟動dnsmasq來配置虛擬機的fixed ip,創建虛擬機時,nova會給虛擬機分配一個fixed ip,並將MAC/IP的對應關系寫入dnsmasq的配置文件中,虛擬機啟動時通過DHCP獲取其fixed ip,因此就不需要將網絡配置信息注入到虛擬機中了。
vlan模式比上面兩種模式復雜,每個project都會分配一個vlan id,每個project也可以有自己的獨立的ip地址段,屬於不同project的虛擬機連接到不同的網橋上,因此不同的project之間是隔離的,不會相互影響。為了訪問一個project的所有虛擬機需要創建一個vpn虛擬機,以此虛擬機作為跳板去訪問該project的其他虛擬機。與flatdhcp類似,vlan模式下,也會為每個project啟動一個dnsmasq來配置虛擬機的fixed ip。
2. nova network部署與配置
部署nova network時至少需要兩塊網卡,一塊作為public network,主要承載公網流量和openstack各個組建之間的流量,要能夠訪問公網,ip地址可以為內網地址也可以為公網地址;另一塊作為internal network,承載虛擬機之間相互通信的流量,不需要為其分配ip地址,只需要保證它們物理上可以互聯即可。
nova network有兩種常見的部署方式,第一種方式是單個nova-network節點,充當所有虛擬機的網關,並維護dhcp服務器。這種方式最大的問題就是單點故障,一旦nova-network節點出問題了,就會影響到所有的虛擬機,需要實施HA方案。另一種方式就是multihost,即在每個計算節點上部署nova-network,每個計算節點上的虛擬機通過本機的nova-network就可以獲取ip地址、metadata及訪問公網。這樣做的優勢就是一旦某個節點出現問題,也不會影響到其他節點,而且有很好的擴展性,也是我們目前部署最為廣泛一種模式。
nova network的主要配置選項有:
-
network_manager:該選項決定了網絡的模式,有三種可選的:nova.network.manager.FlatManager、nova.network.manager.VlanManager、nova.network.manager.FlatDHCPManager,分別對應上面所提到的flat模式、flatdhcp模式和vlan模式。
-
fixed_range:所有虛擬機fixed ip所在的網段,通過nova-manage創建網絡時,創建的網絡應該是該網段的子網。
-
floating_range:所有可以的floating ip所在的網段。
-
force_dhcp_release:是否在刪除虛擬機時立即釋放其所占用的ip地址。若為True,則會立即釋放,否則需要經過一段時間才釋放。默認應該設置為True。
-
my_ip:nova-network所在的ip地址,不顯式設置時該ip是宿主機上一個能訪問公網的ip地址。配置時可顯式的設置為本機的公網ip。
-
multi_host:是否啟用multihost模式,如果啟用,則在每個計算節點上至少要啟動nova-api-metadata、nova-network、nova-compute三個服務。默認值為false。啟用multihost時,需要將其設置為True。
-
public_interface:公網的物理接口。nova network會將floating ip配置在該接口上,另外就是在做SNAT時會將其作為參數加入到iptables規則中。
-
flat_network_bridge:在flat/flatdhcp模式下,使用那個網橋來連接虛擬機,實現虛擬機之間的通信。
-
flat_interface:虛擬機之間通信的物理接口。在flatdhcp模式下,nova network會將該接口加入到flat_network_bridge中,實現跨宿主機的虛擬機之間的通信。默認為none。
-
vlan_interface:虛擬機之間通信的物理接口。在vlan模式下,每個project會有一個vlan,不同的vlan和不同的網橋關聯,網橋再通過vlan_interface實現跨宿主機的通信。
-
vlan_start:在vlan模式下,最小的vlan id。
3. 典型環境配置
1. all in one
all in one環境下,每台機器上有一整套的openstack環境,每台都可以作為一個region,對於測試多region非常有必要。在all in one環境下,虛擬機之間的網絡通信通過網橋就可以完成,所有出到公網的流量則是通過SNAT來實現。所以在這種環境下,需要指定public_interface、flat_network_bridge,但不需要指定flat_interface,要讓其保持默認的none,否則不同的all in one環境可能會出現相互干擾。上次demo環境的網絡問題就是因為flat_interface配置不當造成的。另外,在通過nova-manage創建網絡時也需要注意,不要指定bridge_interface,否則bridge_interface會被加入到網橋中,可能會造成一些很奇怪的問題。上次demo環境中,每隔一段時間配置在eth0上的ip公網ip地址會被移動到網橋上,而且eth0也會被加入到網橋上,其原因就是因為在創建網絡時將bridge_interface設置為了eth0.
2. multihost
在multihost模式下,首先需要將multi_host設置為True,然后在每個計算節點上都安裝好nova-network nova-api-metadata nova-compute。
參考資料
1. http://docs.openstack.org/folsom/openstack-compute/admin/content/ch_networking.html
2. http://www.mirantis.com/blog/openstack-networking-single-host-flatdhcpmanager/
Note: 本文由家軍撰寫