Вопрос или проблема
Я использую:
- Канал: Виктория
- ОС: focal
Недавно в моем кластере произошло отключение электричества. Затем мне пришлось заново развернуть juju приложения nova-compute, keystone, neutron-api, vault, nova-cloud-controller…
Теперь он застрял на nova-cloud-controller. Сначала возникла ошибка из-за отсутствия файла db-client.ca (хотя в nova.conf не была указана ssl конфигурация). Затем мне пришлось вручную создать db-client.ca. Похоже, миграции прошли успешно, потом я протестировал некоторые функции, но не смог создать снимок, и создание нового экземпляра застряло на этапе Планирования.
На хосте nova-cloud-controller я получил следующий журнал ошибок:
2025-02-17 07:57:26.960 1516 INFO nova.compute.rpcapi
[req-b9ed4975-6d8f-44d8-87bc-863055657831 - - - - -] Автоматически
выбрана версия compute RPC 5.12 из минимальной версии сервиса 53
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
[req-b9ed4975-6d8f-44d8-87bc-863055657831 - - - - -]
Исключение при
обработке сообщения: amqp.exceptions.AccessRefused: (0, 0): (403)
ACCESS_REFUSED - Вход был отвергнут с использованием механизма аутентификации
AMQPLAIN. Для подробностей см. журнал брокера.
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server Traceback (most recent call
last):
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/rpc/server.py",
line 165, in _process_incoming
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
res = self.dispatcher.dispatch(message)
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/rpc/dispatcher.py",
line 309, in dispatch
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self._do_dispatch(endpoint, method, ctxt, args)
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/rpc/dispatcher.py",
line 229, in _do_dispatch
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
result = func(ctxt, **new_args)
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/nova/conductor/manager.py", line 1686,
in schedule_and_build_instances
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
self.compute_rpcapi.build_and_run_instance(
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/nova/compute/rpcapi.py", line 1460, in
build_and_run_instance
2025-02-17 07:57:26.9762025- 1516 ERROR
oslo_messaging.rpc.server
cctxt.cast(ctxt, 'build_and_run_instance', **kwargs)
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/rpc/client.py", line
150, in cast
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server self.transport._send(self.target,
msg_ctxt, msg,
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/oslo_messaging/transport.py", line
123, in _send
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self._driver.send(target, ctxt, message,
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/amqpdriver.py",
line 680, in send
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self._send(target, ctxt, message,
wait_for_reply, timeout,
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/oslo_messaging/_drivers/amqpdriver.py",
line 644, in _send
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server with self._get_connection(rpc_common.PURPOSE_SEND) as conn:
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/amqpdriver.py",
line 597, in _get_connection
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return rpc_common.ConnectionContext(self._connection_pool,
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/common.py",
line 423, in __init__
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server self.connection = connection_pool.get()
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/oslo_messaging/_drivers/pool.py", line
109, in get
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self.create()
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/pool.py", line
146, in create
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self.connection_cls(self.conf, self.url, purpose)
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/impl_rabbit.py",
line 625, in __init__
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
self.ensure_connection()
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/oslo_messaging/_drivers/impl_rabbit.py",
line 742, in ensure_connection
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
self.connection.ensure_connection(errback=on_error)
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/kombu/connection.py", line 389, in
ensure_connection
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
self._ensure_connection(*args, **kwargs)
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/kombu/connection.py", line 441, in
_ensure_connection
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
return retry_over_time(
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/kombu/utils/functional.py", line 344,
in retry_over_time
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return fun(*args, **kwargs)
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/kombu/connection.py", line 874, in
_connection_factory
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
self._connection = self._establish_connection()
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/kombu/connection.py", line 809, in
_establish_connection
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
conn = self.transport.establish_connection()
2025-02-17 07:57:26.976 1516
ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/kombu/transport/pyamqp.py", line 130,
in establish_connection
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server conn.connect()
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/amqp/connection.py", line 320, in
connect
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
self.drain_events(timeout=self.connect_timeout)
2025-02-17
07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/amqp/connection.py", line 508, in
drain_events
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server while not self.blocking_read(timeout):
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/amqp/connection.py", line 514, in
blocking_read
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server return self.on_inbound_frame(frame)
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server File
"/usr/lib/python3/dist-packages/amqp/method_framing.py", line 55, in
on_frame
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
callback(channel, method_sig, buf, None)
2025-02-17 07:57:26.976 1516
ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/amqp/connection.py", line 520, in
on_inbound_method
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server
return self.channels[channel_id].dispatch_method(
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/amqp/abstract_channel.py", line 145,
in dispatch_method
2025-02-17 07:57:26.976 1516 ERROR
oslo_messaging.rpc.server listener(*args)
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server
File "/usr/lib/python3/dist-packages/amqp/connection.py", line 650, in
_on_close
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server raise error_for_code(reply_code, reply_text,
2025-02-17 07:57:26.976
1516 ERROR oslo_messaging.rpc.server amqp.exceptions.AccessRefused: (0, 0): (403)
ACCESS_REFUSED - Вход был отвергнут с использованием механизма аутентификации
AMQPLAIN. Для подробностей см. журнал брокера.
2025-02-17 07:57:26.976 1516 ERROR oslo_messaging.rpc.server
В rabbitmq нет указаний на ошибки подключения.
juju status: https://launchpadlibrarian.net/777173611/juju-debug-log.txt
журнал агента juju: https://launchpadlibrarian.net/777173886/machine-0-lxd-104.log
nova-api-wsgi.log: https://launchpadlibrarian.net/777173920/nova-api-wsgi.log
nova-conductor.log: https://launchpadlibrarian.net/777173960/nova-conductor.log
nova-scheduler.log: https://launchpadlibrarian.net/777173993/nova-scheduler.log
nova-manager.log: https://launchpadlibrarian.net/777174167/nova-manage.log
nova.conf: https://launchpadlibrarian.net/777176686/nova.conf
juju show unit nova-cloud-controller: https://launchpadlibrarian.net/777174454/juju-show-unit-nova-cloud-controller.txt
.
Ответ или решение
Ваша проблема с ошибкой "amqp.exceptions.AccessRefused" в nova-cloud-controller при попытке подключения к RabbitMQ является довольно распространенной в инфраструктурах, построенных на OpenStack. Эта ошибка указывает на отказ в доступе, который может возникнуть из-за неправильных настроек аутентификации между сервисами OpenStack и сервером RabbitMQ. Давайте рассмотрим, как можно диагностировать и исправить эту проблему.
Теория
Протокол AMQP, который использует RabbitMQ, требует корректной аутентификации для установления соединения с клиентами. Ошибка ACCESS_REFUSED
(403) обычно возникает при следующих условиях:
- Некорректные учетные данные: Имя пользователя или пароль для подключения к RabbitMQ неверные.
- Неправильно настроенный механизм аутентификации: Указан неправильный механизм аутентификации (например, AMQPLAIN вместо PLAIN).
- Проблемы с правами доступа: У пользователя отсутствуют необходимые привилегии на запрашиваемые ресурсы или обменники.
- Сетевые проблемы: Возможны блокировки или фильтрация сетевого трафика между RabbitMQ и OpenStack сервисами.
Пример
Рассмотрим ситуацию из предоставленных вами данных. Ваш класт урок OpenStack потерял питание, и после этого пришлось заново развернуть приложения Juju, включая nova-cloud-controller. Версия OpenStack — Victoria, операционная система — Ubuntu Focal (20.04). Судя по логам, возникает ошибка доступа при попытке использования аутентификационного механизма AMQPLAIN.
Применение
-
Проверка конфигурации: Убедитесь, что в конфигурационном файле
nova.conf
и других соответствующих конфигурационных файлах, указаны правильные учетные данные для подключения к RabbitMQ. Это может быть в разделе[oslo_messaging_rabbit]
, где должны быть указаныrabbit_userid
,rabbit_password
, и возможноrabbit_host
. -
Проверка механизма аутентификации: Убедитесь, что механизм аутентификации AMQPLAIN поддерживается и настроен корректно. Также стоит проверить, не заблокирован ли механизм PLAIN (часто используется).
-
Лог-файлы RabbitMQ: Поскольку логов RabbitMQ вы не предоставили, стоит их проверить. Обычно они находятся по пути
/var/log/rabbitmq/
. Ошибки или предупреждения в этих логах могут дать более точное понимание, почему именно происходит отказ в доступе. -
Права доступа: Проверьте, что пользователь, указанный в
nova.conf
, имеет все необходимые права доступа. Это можно сделать с помощью команды RabbitMQ для управления правами:rabbitmqctl list_permissions -p <vhost>
Убедитесь, что пользователь имеет необходимые разрешения на читывание, запись и администрирование для нужного виртуального хоста.
-
Обновление конфигурации после отключения питания: Отключение питания могло привести к порче файлов конфигурации или данных. Перепроверьте, что все конфигурационные файлы сохранены и имеют корректные параметры.
-
Juju и OpenStack службы: Перезапустите службы, чтобы удостовериться, что все изменения в конфигурации применены. Для перезапуска используйте:
juju run --unit nova-cloud-controller/0 "sudo systemctl restart nova-compute.service" juju run --unit rabbitmq-server/0 "sudo systemctl restart rabbitmq-server.service"
При необходимости перезапустите другие модули OpenStack, такие как Keystone и Neutron.
-
Обновление и исправление настроек SSL: Если SSL был ранее настроен, его конфигурация может быть утеряна или некорректна после сбоя питания. Проверьте и пересоздайте необходимые SSL сертификаты и ключи.
-
Сетевые проверки: Убедитесь, что все необходимые порты между контроллерами OpenStack и RabbitMQ открыты. Для диагностики можно использовать
telnet
илиnc
для проверки подключения к нужным портам.
Эти шаги должны помочь выявить и устранить проблемы, возникающие при подключении nova-cloud-controller к RabbitMQ. Если проблема не решится, рекомендуется обратиться за дополнительной поддержкой в комьюнити OpenStack, предоставив больше информации о специфике настройки и используемых конфигурациях.