openstack neutron网络插件学习(二)
2.5.5 DHCP服务
Neutron 提供 DHCP 服务的组件是 DHCP agent。DHCP agent 在网络节点运行上,默认通过 dnsmasq 实现 DHCP 功能。
DHCP agent 的配置文件位于 /etc/neutron/dhcp_agent.ini。(正常来说一般不需要什么特殊配置)
- dhcp_driver:使用 dnsmasq 实现 DHCP。
- interface_driver:使用 linux bridge 连接 DHCP namespace interface。
dnsmasq 是一个提供 DHCP 和 DNS 服务的开源软件。一般一个dnsmasp进程对应一个network,可以为该network内开启了dhcp服务的所有subnet提供服务。DHCP agent 会为每个 network 创建一个目录 /opt/stack/data/neutron/dhcp/,用于存放该 network 的 dnsmasq 配置文件。
dnsmasq 重要的启动参数:(1)--dhcp-hostsfile:存放 DHCP host 信息的文件,dnsmasq 从该文件获取 host 的 IP 与 MAC 的对应关系。 /opt/stack/data/neutron/dhcp/xxx(对应某个netwrok)/host下记录着DHCP、所有VM的Interface信息;(2)--interface:指定提供 DHCP 服务的 interface。dnsmasq 会在该 interface 上监听 instance 的 DHCP 请求;
2.5.6 Linux Network NameSpace
每个 namespace 都有自己独立的网络栈,包括 route table,firewall rule,network interface device 等。Neutron 通过 namespace 为每个 network 提供独立的 DHCP 和路由服务,从而允许租户创建重叠的网络。如果没有 namespace,网络就不能重叠,这样就失去了很多灵活性。
每个 dnsmasq 进程都位于独立的 namespace, 命名为 qdhcp-<network id>(每个dnsmasq进程又对应一个network)。ip netns list 命令可以列出所有的namespace。主机本身也有一个 namespace,叫 root namespace,拥有所有物理和虚拟 interface device。物理 interface 只能位于 root namespace。
veth pair:解决了dhcp的interface(tap设备)无法直接与 root namespace 中的 bridge 设备连接。dhcp的ns设备与tap设备被称为一对veth pair,用来将dhcp的namespace连接到root namespace 中的 bridge 设备,可以通过 ip netns exec <network namespace name> <command>管理 namespace。连接关系如下图所示: