用 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

相关文章
相关标签/搜索