1. 程式人生 > >每天5分鐘玩轉 OpenStack(9)

每天5分鐘玩轉 OpenStack(9)

網路虛擬化是虛擬化技術中最複雜的部分,學習難度最大。
但因為網路是虛擬化中非常重要的資源,所以再硬的骨頭也必須要把它啃下來。

為了讓大家對虛擬化網路的複雜程度有一個直觀的認識,請看下圖

這是 OpenStack 官網上給出的計算節點(可以理解為 KVM 的宿主機)虛擬網路的邏輯圖,上面的網路裝置很多,層次也很複雜。
我第一次看到這張圖,也著實被下了一跳。

不過大家也不要怕,萬丈高樓從地起,虛擬網路再複雜,也是由一些基礎的元件構成的。只要我們將這些基礎元件的概念和它們之間的邏輯關係搞清楚了,就能深刻理解虛擬網路的架構,那麼雲環境下的虛擬化網路也就不在話下了。

下面我們來學習網路虛擬化中最重要的兩個東西:Linux Bridge 和 VLAN

Linux Bridge 基本概念

假設宿主機有 1 塊與外網連線的物理網絡卡 eth0,上面跑了 1 個虛機 VM1,現在有個問題是:
如何讓 VM1 能夠訪問外網?

至少有兩種方案

  1. 將物理網絡卡eth0直接分配給VM1,但隨之帶來的問題很多:
    宿主機就沒有網絡卡,無法訪問了;
    新的虛機,比如 VM2 也沒有網絡卡。
    下面看推薦的方案

  2. 給 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 也都可以與外網通訊。

有了上面的基礎知識,下一節將演示如何在實驗環境中實現這套虛擬網路。