Вопрос или проблема
Я развернул 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. Решения
-
Проверьте конфигурацию pg_hba.conf: Убедитесь, что алгоритм аутентификации для пользователя airflow действительно установлен на md5:
# Как правило, этот файл находится здесь: /etc/postgresql/12/main/pg_hba.conf (для Linux)
После изменения файла обязательно перезапустите PostgreSQL.
-
Обновите настройки Pgbouncer: Ваша конфигурация Pgbouncer должна определять, что аутентификация осуществляется через файл users.txt:
auth_type = md5
-
Пересоздайте пароли: Убедитесь, что пароли для airflow и postgres в файле
users.txt
соответствуют действительным md5-хэшам. Вы можете создать новый хэш командой:SELECT md5('your_password');
-
Проверьте журнал Pgbouncer: Убедитесь, что включен детальный логирование (
verbose = 5
), это поможет в отладке дальнейших проблем. -
Использование SCRAM: Если все же решили использовать SCRAM-SHA-256 как метод аутентификации, измените параметры в PostgreSQL и Pgbouncer соответственно. Для этого в
postgresql.conf
добавьте строку:password_encryption = scram-sha-256
4. Заключение
Сложности с авторизацией между Pgbouncer и PostgreSQL часто связаны с несовпадением методов аутентификации. Проанализируйте систему согласно предложенным шагам, и это должно помочь вам решить проблему. Как всегда, рекомендуется тщательно проверять конфигурации на каждом уровне, чтобы исключить возможные проблемы с подключением.
Если, несмотря на все изменения, проблема остается, рассмотрите возможность включения дополнительных логов на уровне базы данных и Pgbouncer для лучшего понимания происходящего.