OpenStack中的云实例无法导入公共SSH密钥

有没有人知道如何实际解决OpenStack中Ubuntu Cloud VM实例无法从Nova-api的元数据服务器导入公钥的问题,并带有以下消息:

2012-07-18 11:05:45,409 - util.py[WARNING]: 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [113/120s]: url error [[Errno 111] Connection refused] 2012-07-18 11:05:52,419 - DataSourceEc2.py[CRITICAL]: giving up on md after 120 seconds 

我发现了很多关于这个问题的提及(例如这里或这里 )并尝试打开/关闭这个iptables规则(使用iptables-save和iptables-apply),但它不起作用。 有趣的规则似乎是:

 $ iptables -t nat -L -v | grep -n3 169.254.169.254 48- 49-Chain nova-network-PREROUTING (1 references) 50- pkts bytes target prot opt in out source destination 51: 32 1920 DNAT tcp -- any any anywhere 169.254.169.254 tcp dpt:http to:128.131.172.155:8775 52- 0 0 DNAT udp -- any any anywhere sneezy.infosys.tuwien.ac.at udp dpt:1000 to:10.0.0.2:1194 53- 54-Chain nova-network-float-snat (1 references) 

顺便说一句,有没有什么好方法可以手动调试它?

将问题解决在一体化部署中

在IRC频道#openstack(zynzel,livemoon)的优秀人员的帮助下,我们通过简单地重启nova-api解决了这个问题:

 sudo restart nova-api 

您可以通过发出以下内容来validation元数据服务器是否确实正常

 lsof -i:8775 

来自您的控制器节点或

 nmap -sS -sV -O -P0 -p8773-8776  

使用控制器节点的IP地址并检查端口8775 / tcp是否已打开并被监听。

可能是这是Dodai-deploy的一个问题,因为在安装nova-compute之后必须安装nova-api才能正确初始化元数据服务器。

修复多节点部署问题

如果您运行多主机部署并希望使用从元数据服务器提取公钥的Ubuntu云实例,则需要在控制器的nova.conf中使用此实例:

 multihost=True enabled_apis=metadata,ec2,osapi_compute,osapi_volume 

这在你的计算节点的nova.conf中:

 multi_host=True enabled_apis=metadata 

如果没有这个,您将在实例的控制台输出(nova console-log test-instance)中收到有关它无法访问元数据服务器的错误,并且您将无法进入它们。

另一个解决方案是通过用户数据仪表板表单(或终端中的文件)告诉您的实例您在Launchpad上的身份,以便它可以从那里提取您的公钥。 语法是(除了源代码之外的其他任何地方都没有解释):

 #cloud-config ssh_import_id: [your-launchpad-username]