用 namspace 隔離 DHCP 服務 - 天天5分鐘玩轉 OpenStack(90)

Neutron 經過 dnsmasq 提供 DHCP 服務,而 dnsmasq 如何獨立的爲每一個 network 服務呢?網絡

答案是經過 Linux Network Namespace 隔離,本節將詳細討論。oop

在二層網絡上,VLAN 能夠將一個物理交換機分割成幾個獨立的虛擬交換機。 相似地,在三層網絡上,Linux network namespace 能夠將一個物理三層網絡分割成幾個獨立的虛擬三層網絡。spa

每一個 namespace 都有本身獨立的網絡棧,包括 route table,firewall rule,network interface device 等。3d

Neutron 經過 namespace 爲每一個 network 提供獨立的 DHCP 和路由服務,從而容許租戶建立重疊的網絡。
若是沒有 namespace,網絡就不能重疊,這樣就失去了不少靈活性。dns

每一個 dnsmasq 進程都位於獨立的 namespace, 命名爲 qdhcp-<network id>,例如 flat_net,咱們有:進程

ip netns list 命令列出全部的 namespace。 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 就是 flat_net 的 namespace。ip

其實,宿主機自己也有一個 namespace,叫 root namespace,擁有全部物理和虛擬 interface device。 物理 interface 只能位於 root namespace。路由

新建立的 namespace 默認只有一個 loopback device。 管理員能夠將虛擬 interface,例如 bridge,tap 等設備添加到某個 namespace。table

對於 flat_net 的 DHCP 設備 tap19a0ed3d-fe,須要將其放到 namespace qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 中,但這樣會帶來一個問題: tap19a0ed3d-fe 將沒法直接與 root namespace 中的 bridge 設備 brqf153b42f-c3 鏈接。配置

Neutron 使用 veth pair 解決了這個問題

veth pair 是一種成對出現的特殊網絡設備,它們象一根虛擬的網線,可用於鏈接兩個 namespace。向 veth pair 一端輸入數據,在另外一端就能讀到此數據。

tap19a0ed3d-fe 與 ns-19a0ed3d-fe 就是一對 veth pair,它們將 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 鏈接到 brqf153b42f-c3。以下圖所示:

能夠經過 ip netns exec <network namespace name> <command> 管理 namespace。 例如查看 ns-19a0ed3d-fe 的配置:

理解了 namespace,下一節咱們分析 instance 從 dnsmasq 獲取 IP 的詳細過程。

 

blob.png

相關文章
相關標籤/搜索