Nova 虚机获取固定IP (Fixed IP)主要分为两个步骤:
(1)在创建虚机过程中,Neutron 随机生成 MAC 和 从配置数据中分配一个固定IP 地址,并保存到 Dnsmasq 的 hosts 文件中,让 Dnsmasq 做好准备。
(2)虚机在启动时向 Dnsmasq 获取 IP 地址
1、创建虚拟机时的数据流
Nova-compute 在创建虚机时,需要 Neutron 所做的主要事情之一就是分配一个 MAC 和 一个或者多个固定 IP 地址,该过程从 Nova-compute 向 Neutron 申请 Port 开始:
步骤2-6:nova-compute向neutron-server申请port,neutron-server是用NeutronDbPlugin创建port,创建port时,生成了随机的mac地址,然后用这MAC地址创建port,同时IP是数据库中取出一个预配置的
ps:创建port时,需要指定网络和mac
REQ: curl -i
http://controller:9696/v2.0/ports.json
-X POST -H
"
X-Auth-Token: ...=
"
-H
"
User-Agent: python-neutronclient
"
-d
'
{"port": {"binding:host_id": "compute1", "admin_state_up": true,
"network_id": "0a4cd030-d951-401a-8202-937b788bea43"
, "tenant_id": "43f66bb82e684bbe9eb9ef6892bd7fd6", "device_owner": "compute:nova", "security_groups": ["8c0dc337-0a6d-4ad7-94bf-a400ee32b2ac"], "device_id": "8671c14e-9ee4-4338-bcc5-8a5f0ea6e1d5"}}
'
步骤7-10:创建port,并绑定到ovs
步骤12-14:通过消息队列告知DHCP Agent,port创建结束,并通知新分配的port信息
步骤15-17:DHCP Agent重新生成hosts文件,并重启dnsmasq进程,以供dhcp获取
步骤13返回的port信息示例如下:此时已经带有ip信息
{
"
port
"
: {
"
status
"
:
"
DOWN
"
,