Ошибка аутентификации Pgbouncer к PostgreSQL

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

Я развернул Airflow версии “2.9.3” в кластере Kind, используя официальный последний helm-чарт Airflow.

Я настроил PostgreSQL и PgBouncer так, чтобы они использовали шифрование паролей по методу md5.

pgbouncer-custom-config

[databases]
airflow-db = host=airflow-postgresql.airflow dbname=airflow-db port=5432 pool_size=10

[pgbouncer]
pool_mode = transaction
listen_port = 6543
listen_addr = *
auth_type = plain
auth_file = /etc/pgbouncer/users.txt
stats_users = airflow
ignore_startup_parameters = extra_float_digits
max_client_conn = 100
verbose = 5
log_disconnections = 0
log_connections = 0

server_tls_sslmode = disable
server_tls_ciphers = normal

users.txt

"airflow" "<md5-хэш-пароль>"
"postgres" "<md5-хэш-пароль>"

метод аутентификации postgresql

PS C:\Users\45407106\Documents\repos\airflow\helm> kubectl.exe -n airflow exec -it pod/airflow-postgresql-0 -- psql -U airflow -d airflow-db -h 10.96.193.92
Пароль для пользователя airflow:
psql (16.4)
Введите "help" для получения справки.

airflow-db=> show password_encryption;
 password_encryption
---------------------
 md5
(1 row)

логи pgbouncer

2024-11-19 07:26:57.452 UTC [1] NOISE S-0x7ff930031560: airflow-db/[email protected]:5432 read pkt="R", len=24
2024-11-19 07:26:57.452 UTC [1] DEBUG S-0x7ff930031560: airflow-db/[email protected]:5432 calling login_answer
2024-11-19 07:26:57.452 UTC [1] DEBUG S-0x7ff930031560: airflow-db/[email protected]:5432 S: req SASL
2024-11-19 07:26:57.452 UTC [1] DEBUG S-0x7ff930031560: airflow-db/[email protected]:5432 S: SASL advertised mechanism: SCRAM-SHA-256
2024-11-19 07:26:57.452 UTC [1] ERROR S-0x7ff930031560: airflow-db/[email protected]:5432 cannot do SCRAM authentication: wrong password type
2024-11-19 07:26:57.452 UTC [1] WARNING C-0x7ff93009b220: airflow-db/[email protected]:58102 pooler error: server login failed: wrong password type
2024-11-19 07:26:57.452 UTC [1] NOISE safe_send(10, 62) = 62
2024-11-19 07:26:57.452 UTC [1] NOISE safe_close(10) = 0

Мне не удается понять проблему, почему возникает ошибка “SASL advertised mechanism: SCRAM-SHA-256”, когда PostgreSQL настроен на использование md5.

Ответ или решение

Проблемы с авторизацией Pgbouncer в PostgreSQL: Анализ и Решения

Ваша проблема с авторизацией Pgbouncer к PostgreSQL, судя по логам, связана с неправильной настройкой механизма аутентификации. Особенно важным здесь является сообщение об ошибке: "cannot do SCRAM authentication: wrong password type". Давайте рассмотрим эту проблему более детально и предложим возможные решения.

1. Обзор конфигурации

Вы описали, что используете:

  • PostgreSQL настроенный на использование md5 в качестве метода шифрования паролей.
  • Pgbouncer с настроенным файлом users.txt, который также содержит пароли в формате md5.

Ваш файл конфигурации Pgbouncer включает следующие параметры:

[pgbouncer]
auth_type = plain
auth_file = /etc/pgbouncer/users.txt

Однако при попытке подключения Pgbouncer пытается использовать метод аутентификации SCRAM-SHA-256 вместо заданного вами md5. Это может происходить по следующим причинам:

2. Причины проблемы

  • Настройки PostgreSQL: Проверьте параметр password_encryption в PostgreSQL. Он должен быть выставлен на md5, что вы уже сделали. Однако обратите внимание на то, какие другие настройки аутентификации заданы для пользователя airflow в pg_hba.conf.

  • Метод аутентификации в pg_hba.conf: Убедитесь, что у пользователя airflow указано использование метода md5 или password. Например:

    host    all             airflow             0.0.0.0/0               md5
  • Совместимость с Pgbouncer: Некоторые версии Pgbouncer могут некорректно обрабатывать методы аутентификации. Убедитесь, что используете актуальную версию Pgbouncer, совместимую с вашей установкой PostgreSQL.

3. Решения

  1. Проверьте конфигурацию pg_hba.conf: Убедитесь, что алгоритм аутентификации для пользователя airflow действительно установлен на md5:

    # Как правило, этот файл находится здесь:
    /etc/postgresql/12/main/pg_hba.conf (для Linux)

    После изменения файла обязательно перезапустите PostgreSQL.

  2. Обновите настройки Pgbouncer: Ваша конфигурация Pgbouncer должна определять, что аутентификация осуществляется через файл users.txt:

    auth_type = md5
  3. Пересоздайте пароли: Убедитесь, что пароли для airflow и postgres в файле users.txt соответствуют действительным md5-хэшам. Вы можете создать новый хэш командой:

    SELECT md5('your_password');
  4. Проверьте журнал Pgbouncer: Убедитесь, что включен детальный логирование (verbose = 5), это поможет в отладке дальнейших проблем.

  5. Использование SCRAM: Если все же решили использовать SCRAM-SHA-256 как метод аутентификации, измените параметры в PostgreSQL и Pgbouncer соответственно. Для этого в postgresql.conf добавьте строку:

    password_encryption = scram-sha-256

4. Заключение

Сложности с авторизацией между Pgbouncer и PostgreSQL часто связаны с несовпадением методов аутентификации. Проанализируйте систему согласно предложенным шагам, и это должно помочь вам решить проблему. Как всегда, рекомендуется тщательно проверять конфигурации на каждом уровне, чтобы исключить возможные проблемы с подключением.

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

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

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