Облачные экземпляры в 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]