DHCP agent 的配置檔案位于 /etc/neutron/dhcp_agent.ini。
dhcp_driver
使用 dnsmasq 實作 DHCP。
interface_driver
使用 linux bridge 連接配接 DHCP namespace interface。
當建立 network 并在 subnet 上 enable DHCP 時,網絡節點上的 DHCP agent 會啟動一個 dnsmasq 程序為該 network 提供 DHCP 服務。
dnsmasq 是一個提供 DHCP 和 DNS 服務的開源軟體。
dnsmasq 與 network 是一對一關系,一個 dnsmasq 程序可以為同一 netowrk 中所有 enable 了 DHCP 的 subnet 提供服務。
回到我們的實驗環境,之前建立了 flat_net,并且在 subnet 上啟用了 DHCP,執行 ps 檢視 dnsmasq 程序,如下圖所示:
DHCP agent 會為每個 network 建立一個目錄 /opt/stack/data/neutron/dhcp/,用于存放該 network 的 dnsmasq 配置檔案。
下面讨論 dnsmasq 重要的啟動參數:
--dhcp-hostsfile
存放 DHCP host 資訊的檔案,這裡的 host 在我們這裡實際上就是 instance。
dnsmasq 從該檔案擷取 host 的 IP 與 MAC 的對應關系。
每個 host 對應一個條目,資訊來源于 Neutron 資料庫。
對于 flat_net,hostsfile 是 /opt/stack/data/neutron/dhcp/f153b42f-c3a1-4b6c-8865-c09b5b2aa274/host,記錄了 DHCP,cirros-vm1 和 cirros-vm2 的 interface 資訊。
--interface
指定提供 DHCP 服務的 interface。
dnsmasq 會在該 interface 上監聽 instance 的 DHCP 請求。
對于 flat_net,interface 是 ns-19a0ed3d-fe。
或許大家還記得,之前我們看到的 DHCP interface 叫 tap19a0ed3d-fe(如下圖所示),并非 ns-19a0ed3d-fe。
從名稱上看,ns-19a0ed3d-fe 和 tap19a0ed3d-fe 應該存在某種聯系,但那是什麼呢?
要回答這個問題,需要先搞懂一個概念:Linux Network Namespace,我們下一節詳細讨論。
本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1854750