openstack平台中创建虚拟机后,命令行可以看到虚拟机获取IP地址,但是虚拟机内部无法获取IP地址,排查步骤如下:
step1.查看opensatck中neutron服务状态,确保dchp服务正常运行。
step2.查看dnsmsp服务是否正常启动,该服务负责生成IP地址.
step3.以上都正常的话,查看虚拟机xml文件,找到相应的tap设备,该设备连接虚拟机,从虚拟机到宿主机的连接图如图所示:
图1:
(1)虚拟机xml中的tap设备对应图1中的A
(2)从中可以看到tap设备还连接qbr(图中qbr-xxx),在宿主机中用brctl也可以查看
(3)qvb和qvo是一对veth设备,一端连接qbr,一端连接br-int,
step4.在br-int中也有一个tap设备,连接dhcp服务,进入对应的namespace中查看,可以看到有相应的tap设备,如果没有,虚拟机仍旧无法拿到Ip地址。
到step4仍旧无法拿到IP原因:
当dhcp-agent负载很重时,就是需要不停的更新hosts文件,还有ip地址的lease更新,这样就导致dhcp-agent发送给neutron-server的report延迟了,从而进一步导致neutron server认为dhcp-agent已经down了,就不会将port creation发送给dhcp-agent,最终,dnsmasq host file没有得到更新,就无法为新创建的虚拟机提供ip地址了
解决办法:1)增加neutron.conf中的report_interval=15(默认值是4) agent_down_time = 30(默认值是9)
2)重启neutron-dhcp-agent服务查看。
tips: 虚拟机网络命名空间中的169.254.169.254 是个什么地址?
这个地址来源于 AWS,当年亚马逊在设计公有云的时候,为了让 instance 能够访问 metadata,就将169.254.169.254这个特殊的 IP 作为 metadata 服务器的地址,instance 启动时就会向169.254.169.254请求 metadata。OpenStack 之后也沿用了这个设计,采用169.254.169.254让虚拟机去拿到metadata 数据。
如果觉得《openstack虚拟机无法获取IP地址》对你有帮助,请点赞、收藏,并留下你的观点哦!