VMware/KVM/OpenStack虛擬化之網絡模式總結


 

一、VMware虛擬機網絡模式

Vmware虛擬機有三種網絡模式:Bridged (橋接模式)NAT (網絡地址轉換模式)Host-Only (僅主機模式)下面分別總結下這三種網絡模式:

1. Bridged (橋接模式)
將虛擬機的虛擬網絡適配器與主機的物理網絡適配器進行交接,虛擬機中的虛擬網絡適配器可通過主機中的物理網絡適配器直接訪問到外部網絡。這就好像在局域網中添加了一台新的、獨立的服務器一樣。因此,虛擬機也會占用局域網中的一個IP地址,並且可以和其他終端進行相互訪問。橋接模式網絡連接支持有線和無線主機網絡適配器。如果想把虛擬機當做一台完全獨立的服務器,並且允許它和其他終端一樣的進行網絡通信,那么橋接模式通常是虛擬機訪問網絡的最簡單途徑。

橋接模式就是將主機網卡與虛擬的網卡利用虛擬網橋進行通信。類似於把物理主機虛擬為一個交換機,所有橋接設置的虛擬機連接到這個交換機的一個接口上,物理主機也同樣插在這個交換機當中,所以所有橋接下的網卡與網卡都是交換模式的,相互可以訪問而不干擾。在橋接模式下,虛擬機IP地址需要與主機在同一網段,如果需要聯網,則網關與DNS需要與主機網卡一致。

 

2. NAT (網絡地址轉換模式)
使用NAT模式網絡連接時,VMware會在主機上建立單獨的專用網絡,用以在主機和虛擬機之間相互通信。虛擬機向外部網絡發送的請求數據”包裹”,都會交由NAT網絡適配器加上”特殊標記”並以主機的名義轉發出去,外部網絡返回的響應數據”包裹”,也是先由主機接收,然后交由NAT網絡適配器根據”特殊標記”進行識別並轉發給對應的虛擬機。因此,虛擬機在外部網絡中不必具有自己的IP地址。從外部網絡來看,虛擬機和主機在共享一個IP地址,默認情況下,外部網絡終端也無法訪問到虛擬機。此外,在一台主機上只允許有一個NAT模式的虛擬網絡。因此,同一台主機上的多個采用NAT模式網絡連接的虛擬機也是可以相互訪問的。如果網絡IP資源緊張,此時使用NAT模式是最好的選擇。NAT模式借助虛擬NAT設備和虛擬DHCP服務器,使得虛擬機可以聯網。 

在NAT模式中,主機網卡直接與虛擬機設備相連,然后虛擬NAT設備與虛擬DHCP服務器一起連接在虛擬交換機VMnet8上,這樣就實現了虛擬機聯網。那么為什么需要虛擬網卡VMware Network Adapter VMnet8呢?VMware Network Adapter VMnet8虛擬網卡主要是為了實現主機與虛擬機之間的通信。

3. Host-Only (僅主機模式)
僅主機模式,是一種比NAT模式更加封閉的的網絡連接模式,它將創建完全包含在主機中的專用網絡。僅主機模式的虛擬網絡適配器僅對主機可見,並在虛擬機和主機系統之間提供網絡連接。相對於NAT模式而言,僅主機模式不具備NAT功能,因此在默認情況下,使用僅主機模式網絡連接的虛擬機無法連接到Internet(在主機上安裝合適的路由或代理軟件,或者在Windows系統的主機上使用Internet連接共享功能,仍然可以讓虛擬機連接到Internet或其他網絡)。在同一台主機上可以創建多個僅主機模式的虛擬網絡,如果多個虛擬機處於同一個僅主機模式網絡中,那么它們之間是可以相互通信的;如果它們處於不同的僅主機模式網絡,則默認情況下無法進行相互通信(可通過在它們之間設置路由器來實現相互通信)。

Host-Only模式其實就是NAT模式去除了虛擬NAT設備,然后使用VMware Network Adapter VMnet1虛擬網卡連接VMnet1虛擬交換機來與虛擬機通信。 Host-Only模式將虛擬機與外網隔開,使得虛擬機成為一個獨立的系統,只與主機相互通信。

二、 KVM虛擬機網絡模式 

Libvirt虛擬網絡是使用虛擬網絡交換機的概念。虛擬網絡交換機是在主機物理機器服務器上運行的軟件結構,虛擬機(客戶機)通過它連接到該物理主機服務器。客戶機的網絡流量通過這個交換機被引導:

Linux主機物理機服務器將虛擬網絡交換機表示為網絡接口。當libvirtd守護進程(libvirtd)首次安裝並啟動時,表示虛擬網絡交換機的默認網絡接口是virbr0。 

這個virbr0接口可以通過ip命令 (ip addr show virbr0),像其他任何接口一樣用命令查看。

KVM中的四種簡單網絡模型,分別如下:
橋接模型:在宿主機中創建一張虛擬網卡作為宿主機的網卡,而物理網卡則作為交換機。
NAT模型:在路由模式中,會出現虛擬機可以訪問其他主機,但是其他主機的報文無法到達虛擬機,而NAT模式則將源地址轉換為路由器(物理網卡)地址,這樣其他主機也知道報文來自那個主機,在docker環境中經常被使用。
路由模型:相當於虛擬機連接到一台路由器上,由路由器(物理網卡),統一轉發,但是不會改變源地址。
隔離模型:虛擬機之間組建網絡,該模式無法與宿主機通信,無法與其他網絡通信,相當於虛擬機只是連接到一台交換機上。

1. 橋接模式
在使用橋接模式時,所有虛擬機都好像與主機物理機器在同一個子網內。同一物理網絡中的所有其他物理機器都知道這些虛擬機,並可以訪問這些虛擬機。橋接操作在OSI網絡模型的第2層。 在中間件 (如hypervisor) 中可以使用多個物理接口,通過綁定把他們連接在一起,然后把它添加的網橋,同時虛擬機也被添加到這個網橋,綁定操作有多種模式,只有少數這些模式可以與虛擬客機正在使用的橋接器配合使用。

2. NAT模式
默認情況下,KVM虛擬網絡交換機以NAT模式運行。也就是說NAT方式是KVM安裝后的默認方式, 它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。它們使用IP偽裝而不是SNAT(Source-NAT)或DNAT(Destination-NAT)。IP偽裝使得連接的guest虛擬機可以使用主機物理機器IP地址與任何外部網絡進行通信。(可以使用命令 "virsh net-list --all" 列出linux宿主機當前KVM的所有網絡模式, 命令結果中的default網絡(virbr0上)是宿主機安裝kvm虛擬機自動安裝的) 默認情況下,虛擬網絡交換機在NAT模式下運行時,放置在主機物理機外部的計算機無法與其中的guest虛擬機進行通信,如下圖所示:

DNS和DHCP 
IP地址可以通過DHCP分配給客戶機。為此,可以將地址池分配給虛擬網絡交換機。Libvirt使用這個dnsmasq程序。dnsmasq的一個實例是由libvirt為每個需要它的虛擬網絡交換機自動配置和啟動的。 

KVM默認網絡配置是NAT方式, libvirtd守護進程(libvirtd)第一次被安裝時,它將包含配置在NAT模式下的初始虛擬網絡交換機。使用此配置,以便安裝的guest虛擬機可以通過主機物理機與外部網絡進行通信。下圖顯示了這個默認配置libvirtd:

3. 路由模式
當使用路由模式時,虛擬交換機連接到連接到主機物理機器的物理LAN,在不使用NAT的情況下來回傳輸流量。虛擬交換機可以檢查所有流量,並使用網絡數據包中包含的信息來做出路由決策。使用此模式時,所有虛擬機都位於其自己的子網中,通過虛擬交換機進行路由。這種情況並不總是理想的,因為物理網絡上的其他主機物理機器不通過手工配置的路由信息是沒法發現這些虛擬機,並且不能訪問虛擬機。路由模式在OSI網絡模型的第三層運行。

4. 隔離模式
使用隔離模式時,連接到虛擬交換機的虛擬機可以相互通信,也可以與主機物理機通信,但其通信不會傳到主機物理機外,也不能從主機物理機外部接收通信。在這種模式下使用dnsmasq對於諸如DHCP的基本功能是必需的。但是,即使該網絡與任何物理網絡隔離,DNS名稱仍然被解析的。因此,DNS名稱能解析但ICMP回應請求(ping)命令失敗這種情況可能會出現。

三、OpenStack虛擬機網絡模式

網絡是OpenStack虛擬化部署中最容易出問題的,也是其結構中難以理清的部分。下面根據自己的理解,談一談OpenStack的虛擬網絡、網絡拓撲和網絡流,以供參考,如有誤述,敬請指出。

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外所有服務都部署在一個主機,這個主機進行各種控制管理,因此也就是控制節點;
-> 多數情況下 (比如為了高可用性),需要把各種管理服務分別部署在不同主機(比如分別提供數據庫集群服務、消息隊列、鏡像管理、網絡控制等),這個時候網絡控制器(運行nova-network)只是控制節點群中的一部分。

2. OpenStack中network的2種ip、3種管理模式

Nova有固定IP浮動IP的概念。固定IP被分發到創建的實例不再改變,浮動IP是一些可以和實例動態綁定和釋放的IP地址。
Nova支持3種類型的網絡,對應3種"網絡管理"類型:Flat管理模式FlatDHCP管理模式VLAN管理模式OpenStack虛擬機默認使用VLAN摸式。這3種類型的網絡管理模式,可以在一個ОpenStack部署里面共存,可以在不同節點不一樣,可以進行多種配置實現高可用性。
Flat (扁平): 所有實例橋接到同一個虛擬網絡,需要手動設置網橋。
FlatDHCP: 與Flat (扁平)管理模式類似,這種網絡所有實例橋接到同一個虛擬網絡,扁平拓撲。不同的是,正如名字的區別,實例的ip提供dhcp獲取 (nova-network節點提供dhcp服務),而且可以自動幫助建立網橋。
VLAN: 為每個項目提供受保護的網段 (虛擬LAN)。

3. OpenStack虛擬機3種網絡模式的工作機制

1) Flat模式
-> 指定一個子網,規定虛擬機能使用的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);
-> 創建實例時,從有效ip地址池接取一個IP,為虛擬機實例分配,然后在虛擬機啟動時候注入虛擬機鏡像 (文件系統);
-> 必須手動配置好網橋 (br100),所有的系統實例都是和同一個網橋連接;網 橋與連到網橋的實例組成一個虛擬網絡,nova-network所在的節點作為默認網關。比如flat_interface=eth1;eth1的ip為 10.0.0.1,其它網絡ip在10.0.0.1/27內。flat interface-->br100-->flat network;
-> 此后,網絡控制器 (nova-network節點) 對虛擬機實例進行NAT轉換,實現與外部的通信。網絡配置保存在/etc/network/interfaces文件。

2) Flat DHCP模式
與Flat模式一樣,從ip池取出ip分配給虛擬機實例,所有的實例都在計算節點中和一個網橋相關。不過,在這個模式里,控制節點做了更多一些的配置,嘗試和以太網設備(默認為eth0)建立網橋,通過dhcp自動為實例分配flat網絡的固定ip,可以回收釋放ip。
-> 網絡控制器(運行nova-network服務的節點)運行dusmasq作為DHCP服務器監聽這個網橋;
-> 實例做一次dhcp discover操作,發送請求;
-> 網絡控制器把從一個指定的子網中獲得的IP地址響應給虛擬機實例;
-> 實例通過網絡控制器與外部實現互相訪問。

3) VLAN網絡模式
OpenStack的默認網絡管理模式,沒有設置--network_manager=nova.network.manager。FlatDHCPManager或者FlatManager的時候默認為vlan。為了實現多台機器的安裝,VLAN網絡模式需要一個支持VLAN標簽(IEEE 802.1Q)的交換機 (switch)。在這個模式里,為每個項目創建了VLAN和網橋。所有屬於某個項目的實例都會連接到同一個VLAN,必要的時候會創建Linux網橋和VLAN。每個項目獲得一些只能從VLAN內部訪問的私有IP地址,即私網網段。每個項目擁有它自己的VLAN,Linux網橋還有子網。被網絡管理員所指定的子網都會在需要的時候動態地分配給一個項目。
-> 網絡控制器上的DHCP服務器為所有的VLAN所啟動,從被分配到項目的子網中獲取IP地址並傳輸到虛擬機實例;
-> 為了實現用戶獲得項目的實例,訪問私網網段,需要創建一個特殊的VPN實例 (代碼名為cloudpipe,用了創建整數、key和vpn訪問實例);
-> 計算節點為用戶生成了證明書和key,使得用戶可以訪問VPN,同時計算節點自動啟動VPN;
-> vpn訪問。

Flat與vLAN的比較
-> 在兩種Flat模式里,網絡控制器扮演默認網關的角色,實例都被分配了公共的IP地址 (扁平式結構,都在一個橋接網絡里)。
-> vLAN模式功能豐富,很適合提供給企業內部部署使用。但是,需要支持vLAN的switches來連接,而且相對比較復雜,在小范圍實驗中常采用FlatDHCP模式。

4. 簡單總結下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時
-> 網絡控制器(運行nova-network服務的節點)一直運行dusmasq作為DHCP服務器監聽網橋(br100);
-> 實例做一次dhcp discover操作,發送請求;
-> 網絡控制器把從一個指定的子網中獲得的IP地址響應給虛擬機實例。

實例訪問外網時:
-> 實例經過所在主機的flat_interface(這是一個flat網絡),連接到nova-network所在的主機(控制節點);
-> 網絡控制器對外出網絡流進行轉發。

外網訪問實例時
-> 網絡控制器對floating ip進行nat;
-> 通過flat網絡將流入數據路由給對應的實例。

下圖1、圖2可以比較單網卡和雙網卡的網絡流(traffic)情況,圖2、圖3可以比較單節點和多節點的網絡流。

圖1:雙網卡多節點OpenStack網絡流

圖2:單網卡多節點OpenStack網絡流

圖3:單網卡單節點OpenStack網絡流

3) 多節點時控制節點和計算節點的工作原理

控制節點
-> 在主機上創建一個網橋(br100),把網關ip賦給這個橋;如果已經有ip,會自動把這個ip賦給網橋作為網關,並修復網關;
-> 建立dhcp server,監聽這個網橋;並在數據庫記錄ip的分配和釋放,從而判定虛擬機釋放正常關閉dhcp;
-> 監聽到ip請求時,從ip池取出ip,響應這個ip給實例;
-> 建立iptables規則,限制和開放與外網的通信或與其它服務的訪問。

計算節點
-> 在主機上建立一個對應控制節點的網橋(br100),把其上實例(虛擬機)橋接到一個網絡(br100所在的網絡);
-> 此后,這個橋、控制節點的橋和實例的虛擬網卡都在同一虛擬網絡,通過控制節點對外訪問。

可見,這種多節點方式有以下特點:
-> 所有實例與外網通信都經過網絡控制器,這也就是SPoF(單故障點);
-> 控制節點提供dhcp服務、nat、建立子網,作為虛擬網絡的網關;
-> 計算節點可以沒有外網ip,同其上的實例一樣,可以把控制節點作為網關對外訪問;
-> 實例與外網通信太多,會造成控制節點網絡的堵塞或者高負載。

5. VLAN模式的特點
VLAN模式的目的是為每個項目提供受保護的網段,具有以下特點:
-> NAT實現public ip;
-> 除了public NAT外沒有其它途徑進入每個lan;
-> 受限的流出網絡,project-admin可以控制;
-> 受限的項目之間的訪問,同樣project-admin可以控制;
-> 所以實例和api的連接通過vpn;

下面是vLAN模式下OpenStack網絡結構 (這里借用OpenStack官方文檔里的圖做一了解)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM