我使用 Puppet 设置了 OpenStack,它在大多数情况下都运行良好,但我遇到了一个相当有害的问题:我的 Ubuntu 客户机(可能还有其他客户机)无法在启动期间检索元数据。
我启动了一个 Cirros 实例来运行几个快速测试,发现
- 网络运行正常。实例可以 ping 通网关以及外部世界。
- 请求
http://169.254.169.254/2009-04-04/meta-data/
产生了预期的结果,表明实例实际上可以到达元数据服务器。
我当时想这可能是单个实例的问题,因此我启动了另一个 Ubuntu 14.10 客户机,但它遇到了完全相同的问题:
util.py[WARNING]: Failed fetching metadata from url `http://169.254.169.254/2009-04-04/meta-data/`
init: Error while reading from descriptor: Broken pipe
版本:* Ubuntu 14.10 Server 64 位(主机和客户机)* Nova 2.17.0 (Icehouse)
谢谢你的时间!
编辑
我从头开始重建了 OpenStack 安装,否则无法解决这个问题,希望在之前的设置中出了点问题。不幸的是,重新安装并没有解决问题。当然,这并不意味着这不是我在这次安装过程中重复的错误。不过,Cirros 映像可以获取该 URL,而 Ubuntu 14.10 Server 映像却不能,尽管它正在获取 IP,这似乎很奇怪。
答案1
这个问题的罪魁祸首是我的 MTU 设置。我总是忘记处理 MTU,但我偶然发现了一篇小文章(在某个地方,如果我找到它,我会发布它),其中概述了同样的问题。我的解决方案是指定
dnsmasq_config_file = /etc/neutron/dnsmasq.conf
在我的/etc/neutron/dhcp_agent.ini
配置中。该/etc/neutron/dnsmasq.conf
文件仅包含
dhcp-option=26,1424
现在所有实例都可以毫无问题地获取元数据!不过 1424 并不是一个固定值。我选择它只是因为我不想确定正确的值是什么。