1. 程式人生 > >Neutron路由篇:L3 agent+Namespace

Neutron路由篇:L3 agent+Namespace

res 問題 -c open 應該 分析 bdd edi 一個

Neutron 的路由服務是由 l3 agent 提供的。 除此之外,l3 agent 通過 iptables 提供 firewall 和 floating ip 服務。 技術分享圖片 l3 agent 需要正確配置才能工作,配置文件為 /etc/neutron/l3_agent.ini,位於控制節點或網絡節點。 技術分享圖片 interface_driver 是最重要的選項 如果 mechanism driver 是 linux bridge,則:
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
如果選用 open vswitch,則:
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
l3 agent 運行在控制或網絡節點上。 技術分享圖片
Neutron 虛擬路由器配置好了 L3 agent,今天將創建虛擬路由器router_100_101,打通 vlan100 和 vlan101。 打開操作菜單 Project -> Network -> Routers。 技術分享圖片 點擊 Create Router 按鈕 技術分享圖片 router 命名為 router_100_101,點擊Create Router 按鈕確認。 技術分享圖片
router_100_101 創建成功。 技術分享圖片 接下來需要將 vlan100 和 vlan101 連接到 router_100_101。 點擊router_100_101 鏈接進入 router 的配置頁面,在 Interfaces標簽中點擊 Add Interface 按鈕。 技術分享圖片 選擇 vlan101 的 subnet_172_16_101_0,點擊Add Interface確認。 技術分享圖片 用同樣的方法添加 vlan100 的 subnet_172_16_100_0。 技術分享圖片 完成後,可以看到 router_100_101 有了兩個 interface,其 IP 正好是 subnet 的 Gateway IP 172.16.100.1 和 172.16.101.1。 到這裏,我們可以預見: 1. router_100_101 已經連接了 subnet_172_16_100_0 和 subnet_172_16_101_0。 2. router_100_101 上已經設置好了兩個 subnet 的 Gateway IP。 3. cirros-vm1 和 cirros-vm3 應該可以通信了。 通過 PING 測試一下。 技術分享圖片
判斷正確,cirros-vm1 和 cirros-vm3 能通信了。 查看 cirros-vm1 的路由表,默認網關為 172.16.100.1。 同時 traceroute 告訴我們,cirros-vm1 確實是通過 router_100_101 訪問到 cirros-vm3 的。 技術分享圖片
首先我們查看控制節點的 linux bridge 結構發生了什麽變化。 技術分享圖片 vlan101 的 bridge 上多了一個 tape17162c5-00,從命名上可以推斷該 TAP 設備對應 router_100_101 的 interface (e17162c5-00fa)。 vlan100 的 bridge 上多了一個 tapd568ba1a-74,從命名上可以推斷該 TAP 設備對應 router_100_101 的 interface (d568ba1a-740e)。 當前網絡結構如圖所示: 技術分享圖片 但發現一個問題:兩個 TAP 設備上並沒有配置相應的 Gateway IP。 技術分享圖片 如果沒有 Gateway IP,router_100_101 是如何完成路由的呢? 答案是: l3 agent 會為每個 router 創建了一個 namespace,通過 veth pair 與 TAP 相連,然後將 Gateway IP 配置在位於 namespace 裏面的 veth interface 上,這樣就能提供路由了。 通過 ip netns 查看 namespace: 技術分享圖片 router 對應的 namespace 命名為 qrouter-<router id>。 通過 ip netns exec <namespace name> ip a 命令查看 router_100_101 namespace 中的 veth interface 配置。 技術分享圖片 namespace 中有兩個 interface:
  1. qr-e17162c5-00 上設置了 Gateway IP 172.16.101.1,與 root namespace 中的 tape17162c5-00 組成 veth pair。
  2. qr-d568ba1a-74 上設置了 Gateway IP 172.16.100.1,與 root namespace 中的 tapd568ba1a-74 組成 veth pair。
網絡結構如圖所示: 技術分享圖片 namespace 中的路由表也保證了 subnet_172_16_100_0 和 subnet_172_16_101_0 之間是可以路由的。 技術分享圖片 分析到這裏,我們已經搞清楚 router_100_101 是如何打通 vlan100 和 vlan 101 了。 但這裏有一個關鍵問題需要進一步分析: 為什麽要把 router_100_101 放到 namespace 中?

Neutron路由篇:L3 agent+Namespace