Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现

neutron提供DHCP服务的组件是DHCP agent。DHCP agent在网络节点上运行,默认通过dnsmasq实现dhcp功能。

Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现_第1张图片
dnsmasq.png

what?

dhcp服务的配置文件是/etc/neutron/dhcp_agent.ini,如下图所示:

Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现_第2张图片
dhcp_agent.png
  • dhcp_driver - 定义使用dnsmasq实现DHCP
  • interface_interface - 定义使用linux bridge连接dhcp服务

Example of interface_driver option for OVS based plugins(OVS, Ryu, NEC, NVP,
nterface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
Example of interface_driver option for LinuxBridge
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

当创建network并且在subnet上enable DHCP服务时,网络节点上的DHCP agent会启动一个dnsmasq进程为该network提供DHCP服务。
dnsmasq和network是一对一的关系,一个dnsmasq进程可以为同一个network中所有的enable dhcp的subnet提供服务。

dnsmasq.png

如上图所示,DHCP agent启动时会为每个network创建一个目录放在 /var/lib/neutron/dhcp/目录下用以存放相关配置文件。服务启动时会指定启动参数,我们来讨论下其中比较重要的几个启动参数。

  • --dhcp-hostfile - 存放DHCP host(instance)信息的文件,dnsmasq从该文件获取host的IP与MAC的对应关系。每一个host对应一个条目,信息来源于neutron数据库。

    dhcp-host.png
  • --interface - 指定提供服务的interface,指定的interface为“ns-cfae36f3-7c”,说明该接口由namespace提供。

why?

我们来讨论一下为什么要使用namespace,首先来了解一下namespace的概念。

Linux Network Namespace 简介

在二层网络上,VLAN可以将一个物理交换机分割成几个独立的虚拟交换机。同样在三层网络上,linux network namespace可以将一个物理三层网络分割成几个独立的虚拟三层网络。
每个namespace都有自己独立的网络栈,包括route table,firewall rule, network interface device等。

为什么使用Linux Network Namespace

  • Neutron 通过namespace为每个network提供独立的dhcp和路由服务,从而允许租户创建重叠的网络。如果没有namespace机制,网络就不能重叠,这显然就不能满足云计算的要求。
  • 每个dnsmasq进程都位于独立的namespace中,命名为qdhcp-
Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现_第3张图片
namspace-named.png
  • 宿主机本身也有一个namespace,叫root namespace,拥有所有物理和虚拟interface device。
  • 新建的namespace默认只有一个loopback devic, 管理员可以将虚拟的interface(tap、bridge)添加到某个namespace中。

使用namespace带来的问题:
对于fla-net的dhcp tap设备,需要将其放到namespace中,但是这样tap设备将无法直接和root namespace中的bridge设备通讯。
neutron 使用veth pair来解决这个问题:

Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现_第4张图片
veth-pair.png

tap19a0ed3d-fe 与 ns-19a0ed3d-fe 就是一对 veth pair,它们将 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 连接到 brqf153b42f-c3。

  • 可以通过ip netns exec 管理namespace。
Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现_第5张图片
ip netns exec.png

你可能感兴趣的:(Learning Openstack Part12 Neutron (4) - DHCP服务namespace实现)