From 237dcb9b28c6a4d053d4668f0c1c4f9fbc7778c2 Mon Sep 17 00:00:00 2001 From: emelinda Date: Sat, 8 Aug 2026 18:32:38 +0300 Subject: [PATCH] =?UTF-8?q?RabbitMQ:=20=D1=81=D0=BD=D1=8F=D1=82=20loopback?= =?UTF-8?q?-only=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Celery не поднимался: worker падал в CrashLoopBackOff на amqp.exceptions.AccessRefused (403) при подключении к брокеру. Диагностика уводила в сторону — 403 читается как несовпадение пароля, но пароль был верный: хеши значения в Vault, в файле, смонтированном в под брокера, и в собранном BROKER_URL совпадали, а rabbitmqctl authenticate_user с ним проходил. Настоящая причина нашлась в логе брокера: PLAIN login refused: user 'rabbit' can only connect via localhost Пользователю разрешён вход только с localhost, поэтому отбивалось любое подключение из кластера — и по той же причине в management UI нельзя было войти снаружи. Лечится так же, как в d8-ugmk-prod: флагом auth.enableLoopbackUser и дублирующим advancedConfiguration. Дубль не избыточен — флаг лишь пишет в rabbitmq.conf строку "loopback_users. = false", которую брокер не применяет: в рантайме loopback_users всё равно оставался [<<"rabbit">>]. Значение задаёт именно advanced.config. --- infrastructure/rabbitmq/aero/rabbitmq.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/infrastructure/rabbitmq/aero/rabbitmq.yaml b/infrastructure/rabbitmq/aero/rabbitmq.yaml index e6812a3..7030609 100644 --- a/infrastructure/rabbitmq/aero/rabbitmq.yaml +++ b/infrastructure/rabbitmq/aero/rabbitmq.yaml @@ -87,6 +87,14 @@ spec: # auth/kubernetes создаётся там же. auth: securePassword: true + # Без этого администратор пускается только с localhost, и любое + # подключение из кластера отбивается на аутентификации: + # PLAIN login refused: user 'rabbit' can only connect via localhost + # Диагностика сбивает с толку: клиент видит 403 ACCESS_REFUSED, будто + # не сошёлся пароль, хотя пароль верный — rabbitmqctl authenticate_user + # с тем же значением проходит. Так у celery не поднимался worker, и по + # той же причине в management UI нельзя было войти снаружи. + enableLoopbackUser: false existingPasswordSecret: "" vault: enabled: true @@ -95,3 +103,15 @@ spec: secretPath: secrets/data/rabbitmq/auth usernameKey: username passwordKey: password + # Дублирует enableLoopbackUser: false намеренно, тем же способом, что и + # d8-ugmk-prod. Одного флага мало: он лишь заменяет в rabbitmq.conf строку + # loopback_users. на "= false", а брокер её не применяет — в рантайме + # rabbitmqctl eval "application:get_env(rabbit, loopback_users)." всё равно + # отдавал {ok,[<<"rabbit">>]}. advanced.config разбирается позже и задаёт + # значение явным списком, поэтому именно он и решает. + advancedConfiguration: |- + [ + {rabbit, [ + {loopback_users, []} + ]} + ].