zoukankan      html  css  js  c++  java
  • 用 namspace 隔离 DHCP 服务

    Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢?

    答案是通过 Linux Network Namespace 隔离,本节将详细讨论。

    在二层网络上,VLAN 可以将一个物理交换机分割成几个独立的虚拟交换机。 类似地,在三层网络上,Linux network namespace 可以将一个物理三层网络分割成几个独立的虚拟三层网络。

    每个 namespace 都有自己独立的网络栈,包括 route table,firewall rule,network interface device 等。

    Neutron 通过 namespace 为每个 network 提供独立的 DHCP 和路由服务,从而允许租户创建重叠的网络。
    如果没有 namespace,网络就不能重叠,这样就失去了很多灵活性。

    每个 dnsmasq 进程都位于独立的 namespace, 命名为 qdhcp-<network id>,例如 flat_net,我们有:

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

    其实,宿主机本身也有一个 namespace,叫 root namespace,拥有所有物理和虚拟 interface device。 物理 interface 只能位于 root namespace。

    新创建的 namespace 默认只有一个 loopback device。 管理员可以将虚拟 interface,例如 bridge,tap 等设备添加到某个 namespace。

    对于 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

  • 相关阅读:
    windows2000/xp运行命令全集
    IP数据包的校验和算法C#版(原)
    做系统清理的批处理
    Combox用ValueMember 之后再添加一项
    安装部署基础——Windows Application
    文件编码
    Left/right join 和inner join 区别
    应用Url重写时CSS引用问题
    数据绑定控件单选框
    算法题:水杯倒水的问题
  • 原文地址:https://www.cnblogs.com/CloudMan6/p/5894891.html
Copyright © 2011-2022 走看看