您的位置:首页 > 运维架构

在OpenStack里如何确保虚机正常访问MetaData IP 169.254.169.254

2015-12-15 16:24 711 查看
OpenStack里,由于镜像(image)操作系统一般都装有cloud-init,所以在启动虚机的时候,会发现虚机去访问169.254.169.254这个地址,尝试获得metadat信息。如果配置不当,就会出现报错:

checking http://169.254.169.254/2009-04-04/instance-id failed 1/3: up 8.19. request failed
failed 2/3: up 13.66. request failed
failed 3/3: up 16.51. request failed


这种报错一般说明虚机无法到达这个地址的80端口。

OpenStack Liberty版本和Kilo版本相比较,nova对metadata的处理有了一些变化。在Kilo版本里,是由openstack-nova-metadata-api来负责监听8775端口,但是在Liberty版本里,直接改成了由openstack-nova-api来监听8775端口。也就是说,在Liberty版本里,openstack-nova-api多承担了一项责任,把metadata-api监听处理的活也给接过来了。因此在Liberty版本里就不需要启动openstack-nova-metadata-api了。

解决方法如下:

1. 在controller节点上检查8775端口是否存在监听。如果没有,检查openstack-nova-api服务是否启动。

# netstat -an|grep 8775
tcp        0      0 192.168.100.10:8775     0.0.0.0:*               LISTEN


2. 如果启动openstack-nova-api服务后依然没有监听端口,就需要检查配置文件了,如下:

2.1) 首先检查/etc/nova/nova.conf文件,确保存在如下内容。需要将$CONTROLLER_IP替换为实际的controller IP。

[DEFAULT]
metadata_listen=$CONTROLLER_IP
metadata_listen_port=8775

[neutron]
service_metadata_proxy = True
metadata_proxy_shared_secret = <Secret_String>


2.2) 在network节点上检查/etc/neutron/metadata_agent.ini文件,确保存在如下内容。注意,这里的Secret_String应该和nova.conf里的一致。

[DEFAULT]
nova_metadata_ip = $CONTROLLER_IP
nova_metadata_port = 8775
metadata_proxy_shared_secret = <Secret_String>


2.3) 在network节点上检查/etc/neutron/l3_agent.init文件,确保存在如下内容:

[DEFAULT]
metadata_port = 9697


2.4) 确保上述配置正确后,在网络节点重新启动neutron-metadata-agent服务和neutron-l3-agent服务,然后在controller节点重新启动openstack-nova-api服务。正常启动后,检查8775端口是否存在监听。

network节点:

# systemctl restart neutron-metadata-agent.service
# systemctl restart neutron-l3-agent.service


controller节点:

# systemctl restart openstack-nova-api.service
# netstat -an|grep 8775 tcp 0 0 192.168.100.10:8775 0.0.0.0:* LISTEN


3. 由于虚拟机到169.254.254.254的路由是通过qrouter namespace内的iptable进行转发的,因此一定要将虚拟机所在的私网(private network)接入虚拟路由器。检查qrouter namespace里的iptables设定,会看到如下自动生成的内容:

# ip netns exec qrouter-931e9c86-ba37-4502-8d50-6282c8d6c4b3 iptables-save|grep 169.254.169.254|grep 9697
-A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -i qr-+ -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x1/0xffff
-A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -i qr-+ -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697


4. 确保所有的neutron服务,特别是neutron-openvswitch-agent服务是active状态,否则还是会有问题。

5. 最后就可以创建虚拟机来验证了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: