在OpenStack里如何确保虚机正常访问MetaData IP 169.254.169.254
2015-12-15 16:24
711 查看
OpenStack里,由于镜像(image)操作系统一般都装有cloud-init,所以在启动虚机的时候,会发现虚机去访问169.254.169.254这个地址,尝试获得metadat信息。如果配置不当,就会出现报错:
这种报错一般说明虚机无法到达这个地址的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服务是否启动。
2. 如果启动openstack-nova-api服务后依然没有监听端口,就需要检查配置文件了,如下:
2.1) 首先检查/etc/nova/nova.conf文件,确保存在如下内容。需要将$CONTROLLER_IP替换为实际的controller IP。
2.2) 在network节点上检查/etc/neutron/metadata_agent.ini文件,确保存在如下内容。注意,这里的Secret_String应该和nova.conf里的一致。
2.3) 在network节点上检查/etc/neutron/l3_agent.init文件,确保存在如下内容:
2.4) 确保上述配置正确后,在网络节点重新启动neutron-metadata-agent服务和neutron-l3-agent服务,然后在controller节点重新启动openstack-nova-api服务。正常启动后,检查8775端口是否存在监听。
network节点:
controller节点:
3. 由于虚拟机到169.254.254.254的路由是通过qrouter namespace内的iptable进行转发的,因此一定要将虚拟机所在的私网(private network)接入虚拟路由器。检查qrouter namespace里的iptables设定,会看到如下自动生成的内容:
4. 确保所有的neutron服务,特别是neutron-openvswitch-agent服务是active状态,否则还是会有问题。
5. 最后就可以创建虚拟机来验证了。
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. 最后就可以创建虚拟机来验证了。
相关文章推荐
- 项目:手机网民监测网站的收获与总结
- Linux下Apache+Mysql+PHP的环境搭建
- opencv处理函数记录_转自opencv中文网站
- 解决popupwindow中会出现的IllegalStateException问题
- 路径正确openLayer也无法获得发布地图
- nginx图片服务器配置
- linux shell脚本增加#!/bin/sh导致的问题
- Dropzone应用
- PopupWindow组件的使用问题
- ubuntn 下 opencv248 编译
- Hadoop2.x的MapReduce改进
- 网站电脑访问没问题,手机访问跳到另一个网站(是个不良网站)
- centos6.6 安装 LXC
- Hadoop2.x的 HA简介
- django+nginx+uwsgi 部署配置
- OpenLayers2.13.1知识整理
- Linux学习笔记之<创建文件>
- linux文件系统和linuxcache
- ecshop show_message
- linux下IPTABLES配置详解