Облачные экземпляры в OpenStack не могут импортировать открытый ключ SSH

Кто-нибудь знает, как на самом деле решить проблему с тем, что экземпляры Ubuntu Cloud VM в OpenStack не могут импортировать открытые ключи с сервера метаданных 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)

Кстати, есть ли хороший способ вручную отладить это?

1 ответ

Решение

Исправление проблемы в развертывании "все в одном"

С помощью хороших людей на IRC канале #openstack (zynzel, livemoon) мы решили эту проблему, просто перезапустив nova-api:

sudo restart nova-api

Вы можете убедиться, что сервер метаданных действительно работает, выполнив:

lsof -i:8775

от вашего узла контроллера или

nmap -sS -sV -O -P0 -p8773-8776 <controller_ip>

с IP-адресом вашего контроллера и проверкой того, что порт 8775/tcp открыт и прослушивается.

Возможно, это проблема Dodai-deploy, поскольку nova-api необходимо установить после установки nova-compute для правильной инициализации сервера метаданных.

Устранение проблемы при многоузловой занятости

Если вы запускаете развертывание с несколькими хостами и хотите использовать облачные экземпляры 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) о невозможности доступа к серверу метаданных, и вы не сможете подключиться к ним по ssh.

Другое решение состоит в том, чтобы сообщить вашему экземпляру, кто вы на Launchpad, через форму Dashboard с данными пользователя (или файл в терминале), чтобы он мог получить ваши открытые ключи оттуда. Синтаксис (не объясняется нигде, кроме как в исходном коде):

#cloud-config
ssh_import_id: [your-launchpad-username]
Другие вопросы по тегам