OpenStack облачный экземпляр не может получить метаданные

Вопрос или проблема

На самом деле я настраиваю частное облако для своей компании с помощью 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, но получает ошибку подключения. Это указывает на то, что экземпляры не могут правильно достучаться до метаданных.

Возможные причины проблемы

  1. Неправильная конфигурация 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 установлены правильно.
  2. Фаерволл и сетевые правила:

    • Проверьте настройки фаерволла на контроллере и вычислительных узлах. Убедитесь, что порты для метаданных открыты (обычно HTTP на порту 80).
    • Убедитесь, что сетевые группы и правила безопасности (security groups) не блокируют доступ к метаданным.
  3. Метаданные не доступны в сети:

    • Поскольку вы можете успешно пинговать 169.254.169.254 из пространства имен сети DHCP, это указывает на то, что метаданные на самом деле доступны, но экземпляры могут не знать, как к ним обратиться. Убедитесь, что правильные маршруты настроены, и виртуальные машины могут обращаться к этому IP-адресу.

Шаги для устранения ошибки

  1. Тестирование конфигурации:

    • Попробуйте перезагрузить службы neutron-metadata-agent и nova-compute, чтобы убедиться, что они применили последние изменения конфигурации:
      systemctl restart neutron-metadata-agent
      systemctl restart nova-compute
  2. Проверка логов:

    • Изучите логи neutron-metadata-agent и nova-compute для выявления дополнительных ошибок или предупреждений, которые могут помочь в диагностике:
      journalctl -u neutron-metadata-agent
      journalctl -u nova-compute
  3. Использование curl и тестирование доступа к метаданным:

    • Запустите команду внутри экземпляра для получения метаданных, чтобы проверить, доступен ли метаданный сервер:
      curl http://169.254.169.254/latest/meta-data/
    • Если команда завершится ошибкой, это подтвердит проблему с доступом к метаданным.
  4. Справочная документация:

    • Ознакомьтесь с официальной документацией OpenStack, касающейся настройки метаданных, и проверьте, нет ли конкретных рекомендаций для вашей версии (Stein).

Заключение

Проблемы с доступом к метаданным в OpenStack могут быть вызваны множеством факторов, начиная от неправильной конфигурации сетевых служб до фаерволлов и сетевых маршрутов. Тщательное следование шагам по диагностике поможет вам выявить и устранить проблему. Если проблема сохраняется, рассмотреть возможность обращения за помощью в сообщество OpenStack.

Пользуйтесь нашими рекомендациями для проверки конфигураций и диагностики, чтобы обеспечить стабильную работу вашего облака на OpenStack.

Оцените материал
Добавить комментарий

Капча загружается...