RabbitMQ: Рукопожатие прекращено сервером (ДОСТУП-ОТКАЗАНО)

#javascript #kubernetes #rabbitmq

Вопрос:

Я пытаюсь отправлять сообщения RabbitMQ со своей хост — машины на экземпляр Minikube с развернутым кластером RabbitMQ.

При запуске моего сценария отправки я получаю эту ошибку:

 Handshake terminated by server: 403 (ACCESS-REFUSED) with message "ACCESS_REFUSED - Login was refused 
using authentication mechanism PLAIN. For details see the broker logfile.
 

В файлах журналов брокера я вижу эту строку:

 Error on AMQP connection <0.13226.0> (172.17.0.1:40157 -> 172.17.0.8:5672, state: starting):
PLAIN login refused: user 'rabbitmq-cluster-default-user' - invalid credentials
 

Я уверен, что у меня есть правильные учетные данные, так как я получил их непосредственно из модуля RabbitMQ, следуя официальной документации (ссылка).

Мой сценарий отправки приведен ниже:

 const amqp = require('amqplib/callback_api');

const cluster = "amqp://rabbitmq-cluster-default-user:dJhLl2aVF78Gn07g2yGoRuwjXSc6tT11@192.168.49.2:30861";

amqp.connect(cluster, function(error0, connection) 
{
    if (error0)
    {
        throw error0;
    }

    connection.createChannel(function(error1, channel) 
    {
        if (error1)
        {
            throw error1;
        }

        const queue = "files";
        var msg = {
            name: "Hello World"
        };

        var msgJson = JSON.stringify(msg);

        channel.assertQueue(queue, {
            durable: false
        });

        channel.sendToQueue(queue, Buffer.from(msgJson));
    });
});
 

Я знаю, что код работает, так как я запустил точно такой же сценарий для своей настройки локального хоста, и он сработал. Единственное, что я изменил, — это URL-адрес (для сервиса Minikube RabbitMQ).

Я видел несколько других сообщений, содержащих аналогичную проблему, но большинство решений связано с включением правильных учетных данных в URI, что я и сделал.

Есть еще какие-нибудь идеи?

Ответ №1:

Вы можете использовать переадресацию порта службы RabbitMQ на свой локальный компьютер и использовать логин пользовательского интерфейса и проверить пароль с помощью пользовательского интерфейса, предоставленного самим RabbitMQ.

 kubectl port-forward svc/rabbitmq UI-PORT:UI-PORT (must be 15672)
 

затем из браузера

 localhost:15762  
 

должно быть достаточно

Для получения разрешения вы можете проверить, можете ли вы войти в систему из самого контейнера. Если вход в систему из контейнера завершится неудачно, вы также можете проверить файл yaml или диаграмму управления, которую вы используете, на предмет методов входа и учетных данных. Обычный вход в систему может быть отключен.

Другая ситуация может быть связана с распределением. При развертывании RabbitMQ я стараюсь использовать диаграммы bitnami. Я могу их предложить.

Если все это не сработает, вы можете использовать другой способ. Вы можете попытаться создать другого пользователя с правами администратора для подключения к RabbitMQ, а затем продолжить его использование.

Для получения дополнительной информации вы можете публиковать журналы контейнеров/модулей, чтобы мы могли их видеть. Хороший день.

Комментарии:

1. Так что это не совсем та проблема, с которой я столкнулся, но она привела меня в правильном направлении, проверив, могу ли я войти в пользовательский интерфейс. Оказывается, когда я попросил у модуля RabbitMQ учетные данные, я неправильно расшифровал имя пользователя, поэтому он каким-то образом дал мне имя пользователя в виде обычного текста вместо правильного base64. Спасибо за помощь

2. @BradyHarper Я просто рад помочь.