網路虛擬化是虛擬化技術中最複雜的部分,學習難度最大。 但因為網路是虛擬化中非常重要的資源,所以再硬的骨頭也必須要把它啃下來。
為了讓大家對虛擬化網路的複雜程度有乙個直觀的認識,請看下圖
這是 openstack 官網上給出的計算節點(可以理解為 kvm 的宿主機)虛擬網路的邏輯圖,上面的網路裝置很多,層次也很複雜。
我第一次看到這張圖,也著實被下了一跳。
不過大家也不要怕,萬丈高樓從地起,虛擬網路再複雜,也是由一些基礎的元件構成的。只要我們將這些基礎元件的概念和它們之間的邏輯關係搞清楚了,就能深刻理解虛擬網路的架構,那麼雲環境下的虛擬化網路也就不在話下了。
下面我們來學習網路虛擬化中最重要的兩個東西:linux bridge 和 vlan
假設宿主機有 1 塊與外網連線的物理網絡卡 eth0,上面跑了 1 個虛機 vm1,現在有個問題是: 如何讓 vm1 能夠訪問外網?
至少有兩種方案
將物理網絡卡eth0直接分配給vm1,但隨之帶來的問題很多: 宿主機就沒有網絡卡,無法訪問了; 新的虛機,比如 vm2 也沒有網絡卡。 下面看推薦的方案
給 vm1 分配乙個虛擬網絡卡 vnet0,通過 linux bridge br0 將 eth0 和 vnet0 連線起來,如下圖所示
linux bridge 是 linux 上用來做 tcp/ip 二層協議交換的裝置,其功能大家可以簡單的理解為是乙個二層交換機或者 hub。多個網路裝置可以連線到同乙個 linux bridge,當某個裝置收到資料報時,linux bridge 會將資料**給其他裝置。
在上面這個例子中,當有資料到達 eth0 時,br0 會將資料**給 vnet0,這樣 vm1 就能接收到來自外網的資料;反過來,vm1 傳送資料給 vnet0,br0 也會將資料**到 eth0,從而實現了 vm1 與外網的通訊。
現在我們增加乙個虛機 vm2,如下圖所示
vm2 的虛擬網絡卡 vnet1 也連線到了 br0 上。現在 vm1 和 vm2 之間可以通訊,同時 vm1 和 vm2 也都可以與外網通訊。
有了上面的基礎知識,下一節將演示如何在實驗環境中實現這套虛擬網路。
linux虛擬化之KVM虛擬化 kvm的安裝
kvm 是基於核心的虛擬機器 kernel based virtual machine 它是linux 的乙個核心模組,核心版本需要在linux 2.6.20以上。kvm虛擬機器是基於硬體輔助虛擬化技術。目前支援這個功能的應用為qume。所以qume和kvm虛擬機器磁碟的指令相關。ps 後面提到這個...
KVM 記憶體虛擬化
除了 cpu 虛擬化,另乙個關鍵是記憶體虛擬化,通過記憶體虛擬化共享物理系統記憶體,動態分配給虛擬機器。虛擬機器的記憶體虛擬化很象現在的作業系統支援的虛擬記憶體方式,應用程式看到鄰近的記憶體位址空間,這個位址空間無需和下面的物理機器記憶體直接對應,作業系統保持著虛擬頁到物理頁的對映。現在所有的 x8...
KVM 記憶體虛擬化
dev kvm 裝置 虛擬化分為軟體虛擬化和硬體虛擬化,而且遵循 intercept 和 virtualize 的規律。記憶體虛擬化也分為基於軟體的記憶體虛擬化和硬體輔助的記憶體虛擬化,其中,常用的基於軟體的記憶體虛擬化技術為 影子頁表 技術,硬體輔助記憶體虛擬化技術為 intel 的 ept ex...