天天看點

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

上一節我們建立了虛拟路由器“router_100_101”,并通過 ping 驗證了 vlan100 和 vlan101 已經連通。

本節将重點分析其中的原理。

首先我們檢視控制節點的 linux bridge 結構發生了什麼變化。

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

vlan101 的 bridge 上多了一個 tape17162c5-00,從命名上可以推斷該 TAP 裝置對應 router_100_101 的 interface (e17162c5-00fa)。

vlan100 的 bridge 上多了一個 tapd568ba1a-74,從命名上可以推斷該 TAP 裝置對應 router_100_101 的 interface (d568ba1a-740e)。

目前網絡結構如圖所示:

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

但發現一個問題:兩個 TAP 裝置上并沒有配置相應的 Gateway IP。

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

如果沒有 Gateway IP,router_100_101 是如何完成路由的呢?

答案是:

l3 agent 會為每個 router 建立了一個 namespace,通過 veth pair 與 TAP 相連,然後将 Gateway IP 配置在位于 namespace 裡面的 veth interface 上,這樣就能提供路由了。

通過 ip netns 檢視 namespace:

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

router 對應的 namespace 命名為 qrouter-<router id>。

通過 ip netns exec <namespace name> ip a 指令檢視 router_100_101 namespace 中的 veth interface 配置。

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

namespace 中有兩個 interface:

qr-e17162c5-00 上設定了 Gateway IP 172.16.101.1,與 root namespace 中的 tape17162c5-00 組成 veth pair。

qr-d568ba1a-74 上設定了 Gateway IP 172.16.100.1,與 root namespace 中的 tapd568ba1a-74 組成 veth pair。

網絡結構如圖所示:

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

namespace 中的路由表也保證了 subnet_172_16_100_0 和 subnet_172_16_101_0 之間是可以路由的。

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

分析到這裡,我們已經搞清楚 router_100_101 是如何打通 vlan100 和 vlan 101 了。

但這裡有一個關鍵問題需要進一步分析:

為什麼要把 router_100_101 放到 namespace 中?

下一節我們将詳細分析這個問題。

虛拟 ​router 原理分析- 每天5分鐘玩轉 OpenStack(101)

繼續閱讀