Вопрос или проблема
На самом деле я настраиваю частное облако для своей компании с помощью OpenStack (Stein).
Я следовал учебнику с официального сайта, и всё, похоже, работает хорошо… кроме получения метаданных из облачного экземпляра.
Позвольте объяснить, как настроена моя инфраструктура :
Все компоненты OpenStack установлены на хосте KVM (2xXeon 32 Core, 320Go RAM, 2To HDD, …)
Я настроил ВМ следующим образом :
- openstack-controller001 192.168.50.11
- openstack-compute001 192.168.50.41
- openstack-storage001 192.168.50.61 (для Cinder)
- db001 192.168.50.81 (БД не размещается на том же сервере, что и контроллер)
- ldap001 192.168.50.251 (LDAP пока не используется, только DNS и NTP сервер)
Когда я запускаю новый экземпляр Ubuntu или Debian, созданный из образов облака, я не могу подключиться к этим ВМ через SSH, моя пара ключей всегда отвергается (ошибка: доступ запрещён). После некоторых исследований я понял, что ВМ не загружает SSH приватный ключ с хоста. Похоже, что ВМ обращается к серверу метаданных, используя IP-адрес DHCP-сервера моей виртуальной сети вместо прокси-сервера метаданных, которым является контроллер, если я не ошибаюсь?
[ 15.840973] cloud-init[386]: 2019-05-20 05:53:58,124 - url_helper.py[WARNING]: Вызов 'http://172.16.10.10/latest/meta-data/instance-id' завершился неудачей [0/120s]: ошибка запроса [HTTPConnectionPool(host="172.16.10.10", port=80): Превышено максимальное количество попыток соединения с url: /latest/meta-data/instance-id (Причина: NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f098d1c0e10>: Не удалось установить новое соединение: [Errno 111] Соединение отклонено',))]
172.16.10.10 представляет DHCP-сервер моей виртуальной сети (172.16.0.0/16, диапазон DHCP 172.16.10.10~172.16.20.254). Я думаю, что что-то не так, несмотря на то, что конфигурация кажется правильной.
/etc/neutron/neutron.conf (openstack-controller001)
[DEFAULT]
# ...
nova_metadata_host = openstack-controller001
metadata_proxy_shared_secret = XXXXXXXXXXXXXXXXXX
/etc/nova/nova.conf (openstack-compute001)
[neutron]
# ...
service_metadata_proxy = true
metadata_proxy_shared_secret = XXXXXXXXXXXXXXXXXX
Спасибо за ваши ответы.
Сервер метаданных работает на openstack-controller001 :
[admin@openstack-controller001 ~]$ systemctl status neutron-metadata-agent
\u25cf neutron-metadata-agent.service - OpenStack Neutron Metadata Agent
Loaded: loaded (/usr/lib/systemd/system/neutron-metadata-agent.service; включен; установка по умолчанию: отключена)
Active: active (running) since \u6708 2019-05-20 14:45:59 JST; 23h ago
Main PID: 15329 (/usr/bin/python)
CGroup: /system.slice/neutron-metadata-agent.service
\u251c\u250015329 /usr/bin/python2 /usr/bin/neutron-metadata-agent --config-...
\u251c\u250015357 /usr/bin/python2 /usr/bin/neutron-metadata-agent --config-...
\u2514\u250015358 /usr/bin/python2 /usr/bin/neutron-metadata-agent --config-...
5\u6708 20 14:45:59 openstack-controller001.adoc.local systemd[1]: Stopped Open...
5\u6708 20 14:45:59 openstack-controller001.adoc.local systemd[1]: Started Open...
Hint: Некоторые строки были сокращены, используйте -l для полного отображения.
Я не знаю, может ли моя ВМ достучаться до сервера 169.254.169.254, но из сетевого пространства имен может.
[admin@openstack-controller001 ~]$ openstack network list
+--------------------------------------+---------------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+---------------+--------------------------------------+
| 838b6191-33d6-4683-958e-cee434518743 | provider | d524b6e6-24ad-4a28-9482-b03f4bf22690 |
| c6ed4cfe-43b4-42b7-8fb5-f205a962f9f7 | adoc-net-main | 053681d8-4d5c-4ef4-8be7-f2276d43b26c |
+--------------------------------------+---------------+--------------------------------------+
[admin@openstack-controller001 ~]$ ip netns
qdhcp-838b6191-33d6-4683-958e-cee434518743 (id: 0)
qrouter-3a164855-6c8f-447c-8b0f-49e86d823488 (id: 2)
qdhcp-c6ed4cfe-43b4-42b7-8fb5-f205a962f9f7 (id: 1)
[root@openstack-controller001 admin]# ip netns exec qdhcp-c6ed4cfe-43b4-42b7-8fb5-f205a962f9f7 ping 169.254.169.254
PING 169.254.169.254 (169.254.169.254) 56(84) bytes of data.
64 bytes from 169.254.169.254: icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from 169.254.169.254: icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from 169.254.169.254: icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from 169.254.169.254: icmp_seq=4 ttl=64 time=0.048 ms
64 bytes from 169.254.169.254: icmp_seq=5 ttl=64 time=0.033 ms
Это нормально, что ВМ ищет локальный сервер метаданных у DHCP-сервера?
Ответ или решение
Проблема с получением метаданных экземпляра в OpenStack
При настройке частного облака на базе OpenStack, вы столкнулись с проблемой, связанной с невозможностью виртуальных машин (VM) получать метаданные, необходимых для корректной работы SSH и других сервисов. Рассмотрим, как диагностировать и решить эту проблему.
Описание проблемы
Ваша инфраструктура построена на KVM-хосте, и вы имеете несколько узлов, включая контроллер и вычислительные узлы. При создании новых экземпляров (например, Ubuntu или Debian) VM не могут подключиться через SSH, поскольку ключи SSH не загружаются. Причина, скорее всего, кроется в том, что экземпляры пытаются получить метаданные с IP-адреса DHCP вашего виртуального сетевого интерфейса, а не с IP-адреса метаданных.
Из логов cloud-init
видно, что экземпляр пытается обратиться к http://172.16.10.10/latest/meta-data/instance-id
, но получает ошибку подключения. Это указывает на то, что экземпляры не могут правильно достучаться до метаданных.
Возможные причины проблемы
-
Неправильная конфигурация Neutron и Nova:
- Убедитесь, что в конфигурации Neutron (в файле
/etc/neutron/neutron.conf
) указаны правильные параметры:[DEFAULT] nova_metadata_host = openstack-controller001 metadata_proxy_shared_secret = XXXXXXXXXXXXXXXXXX
- Также необходимо проверить конфигурацию Nova на вычислительном узле (
/etc/nova/nova.conf
), чтобы убедиться, что параметрыservice_metadata_proxy
иmetadata_proxy_shared_secret
установлены правильно.
- Убедитесь, что в конфигурации Neutron (в файле
-
Фаерволл и сетевые правила:
- Проверьте настройки фаерволла на контроллере и вычислительных узлах. Убедитесь, что порты для метаданных открыты (обычно HTTP на порту 80).
- Убедитесь, что сетевые группы и правила безопасности (security groups) не блокируют доступ к метаданным.
-
Метаданные не доступны в сети:
- Поскольку вы можете успешно пинговать
169.254.169.254
из пространства имен сети DHCP, это указывает на то, что метаданные на самом деле доступны, но экземпляры могут не знать, как к ним обратиться. Убедитесь, что правильные маршруты настроены, и виртуальные машины могут обращаться к этому IP-адресу.
- Поскольку вы можете успешно пинговать
Шаги для устранения ошибки
-
Тестирование конфигурации:
- Попробуйте перезагрузить службы
neutron-metadata-agent
иnova-compute
, чтобы убедиться, что они применили последние изменения конфигурации:systemctl restart neutron-metadata-agent systemctl restart nova-compute
- Попробуйте перезагрузить службы
-
Проверка логов:
- Изучите логи
neutron-metadata-agent
иnova-compute
для выявления дополнительных ошибок или предупреждений, которые могут помочь в диагностике:journalctl -u neutron-metadata-agent journalctl -u nova-compute
- Изучите логи
-
Использование
curl
и тестирование доступа к метаданным:- Запустите команду внутри экземпляра для получения метаданных, чтобы проверить, доступен ли метаданный сервер:
curl http://169.254.169.254/latest/meta-data/
- Если команда завершится ошибкой, это подтвердит проблему с доступом к метаданным.
- Запустите команду внутри экземпляра для получения метаданных, чтобы проверить, доступен ли метаданный сервер:
-
Справочная документация:
- Ознакомьтесь с официальной документацией OpenStack, касающейся настройки метаданных, и проверьте, нет ли конкретных рекомендаций для вашей версии (Stein).
Заключение
Проблемы с доступом к метаданным в OpenStack могут быть вызваны множеством факторов, начиная от неправильной конфигурации сетевых служб до фаерволлов и сетевых маршрутов. Тщательное следование шагам по диагностике поможет вам выявить и устранить проблему. Если проблема сохраняется, рассмотреть возможность обращения за помощью в сообщество OpenStack.
Пользуйтесь нашими рекомендациями для проверки конфигураций и диагностики, чтобы обеспечить стабильную работу вашего облака на OpenStack.