dnsmasq PXE 过滤器¶
一个检查 PXE DHCP 堆栈通常由 dnsmasq 服务实现。 dnsmasq PXE 过滤器实现依赖于直接配置 dnsmasq DHCP 服务,以提供一个缓存的 PXE 流量过滤器,用于节点 MAC 地址。
工作原理¶
该过滤器通过在 dnsmasq DHCP hosts 目录中为每个 MAC 地址填充一个配置文件来工作。 每个文件通过 ignore 指令启用或禁用特定 MAC 地址的 DHCP 服务
$ cat /etc/dnsmasq.d/de-ad-be-ef-de-ad
de:ad:be:ef:de:ad,ignore
$
文件名用于跟踪缓存中的所有 MAC 地址,避免文件解析。 文件的内容决定了 MAC 地址的访问策略。
得益于 inotify 机制,当 DHCP hosts 目录中创建或修改文件时,dnsmasq 会收到通知。 因此,要允许一个 MAC 地址,过滤器会移除 ignore 指令
$ cat /etc/dnsmasq.d/de-ad-be-ef-de-ad
de:ad:be:ef:de:ad
$
hosts 目录的内容建立了一个缓存的 MAC 地址过滤器,该过滤器与 ironic 端口列表保持同步。
注意
dnsmasq inotify 机制的实现不会对文件被删除或截断做出反应。
配置¶
inotify 机制是在 2.73 版本中引入到 dnsmasq 的。此处 提供了相关信息。 此过滤器驱动程序已通过 ironic-inspector CI 与 dnsmasq 版本 >=2.76 进行了检查。
要启用 dnsmasq PXE 过滤器,请更新 ironic-inspector 配置文件中的 PXE 过滤器驱动程序名称
[pxe_filter]
driver = dnsmasq
可以指定 DHCP hosts 目录以覆盖默认的 /var/lib/ironic-inspector/dhcp-hostsdir
[dnsmasq_pxe_filter]
dhcp_hostsdir = /etc/ironic-inspector/dhcp-hostsdir
过滤器设计依赖于 hosts 目录由 ironic-inspector 独占控制。 hosts 目录应被视为 ionic-inspector 的一个私有缓存目录,dnsmasq 通过 inotify 机制从中轮询配置更新。 该目录必须可由 ironic-inspector 写入,并可由 dnsmasq 读取。
也可以覆盖默认的(空的)dnsmasq 启动和停止命令,例如,直接控制 dnsmasq 服务
[dnsmasq_pxe_filter]
dnsmasq_start_command = dnsmasq --conf-file /etc/ironic-inspector/dnsmasq.conf
dnsmasq_stop_command = kill $(cat /var/run/dnsmasq.pid)
注意
这些命令支持 shell 扩展。 默认的空启动命令意味着 dnsmasq 服务在过滤器初始化时不会启动。 相反,默认的空停止命令意味着该服务在(错误)退出时不会停止。
注意
这些命令通过 rootwrap 机制执行,因此覆盖可能需要在 rootwrap.d 目录中创建一个过滤器文件。 一个可以使用 systemctl 设施的示例配置可能是
sudo cat > /etc/ironic-inspector/rootwrap.d/ironic-inspector-dnsmasq-systemctl.filters <<EOF
[Filters]
# ironic_inspector/pxe_filter/dnsmasq.py
systemctl: CommandFilter, systemctl, root, restart, dnsmasq
systemctl: CommandFilter, systemctl, root, stop, dnsmasq
EOF
注意事项¶
初始同步将根据 ironic 维护的端口数量对 dnsmasq 服务施加一些负载。 启动可能需要最多一分钟的完全 CPU 负载,对于大量的 MAC 地址(数万个)。 后续的过滤器同步只会导致 dnsmasq 解析修改后的文件。 通常这些是添加到计算服务或从计算服务中移除的裸机节点,这意味着每次同步调用都会更新数十个文件。
ironic-inspector 接管 DHCP hosts 目录的控制权以实现其过滤器缓存。 文件是动态生成的,因此不应手动编辑。 为了尽量减少部署和内省之间的干扰,ironic-inspector 必须在初始同步之后才启动 dnsmasq 服务。 相反,在(意外)ironic-inspector 退出时,会停止 dnsmasq 服务。
为了避免随着时间的推移积累过时的 DHCP hosts 文件,驱动程序在启动期间的初始同步之前会清理 DHCP hosts 目录。
虽然过滤器驱动程序会尽最大努力始终停止 dnsmasq 服务,但建议操作员配置 dnsmasq 服务,以便在 ironic-inspector(意外)退出时终止,以防止 dnsmasq 服务使用过时的拒绝列表。