Подключение к внешнему PostgreSQL завершается ошибкой SSL is not enabled on the server
Описание проблемы
Когда экземпляр SonarQube настроен на использование внешней базы данных PostgreSQL, Pod SonarQube не запускается, а в его журналах появляется сообщение, похожее на:
или
Интерфейс SonarQube UI так и не становится доступным, потому что веб-процесс завершается во время инициализации базы данных.
Корневая причина
JDBC-драйвер PostgreSQL по умолчанию пытается согласовать SSL при каждом новом подключении. Если в целевом PostgreSQL SSL отключён (или он не настроен на принятие TLS-handshake от этого клиента), драйвер аварийно завершает работу с сообщением The server does not support SSL, и Pod SonarQube не может завершить запуск.
Исправление заключается в том, чтобы указать JDBC-драйверу не пытаться использовать SSL, установив sslmode=disable в JDBC URL.
Устранение неполадок
Проверьте журналы Pod SonarQube:
Если в журнале указано The server does not support SSL или SSL is not enabled on the server, эта проблема относится к вашему случаю.
Вы можете отдельно проверить, принимает ли целевой PostgreSQL SSL, с помощью psql с любого узла, который может к нему подключиться:
Если эта команда завершается с ошибкой, связанной с SSL, сервер не поддерживает SSL в этом соединении, и приведённое ниже обходное решение применимо.
Решение
Добавьте sslmode=disable как параметр запроса в JDBC URL, указанный в CR SonarQube. Остальные JDBC-параметры (socketTimeout и т. д.) сохраняются; sslmode добавляется через &:
Указанный secret должен содержать только пароль — см. Настройка PostgreSQL и учетных данных доступа к аккаунту для эталонной схемы secret. Соответствующий ключ — jdbc-password:
Примените изменение к CR. Operator выполнит reconcile нового jdbcUrl в ConfigMap SonarQube; пересоздайте Pod SonarQube, чтобы JDBC-подключение было установлено заново с новым режимом:
Примечания
- Отключение SSL уместно, когда SonarQube и PostgreSQL обмениваются данными через доверенную частную сеть. Для развёртываний, в которых трафик базы данных проходит через недоверенную границу, настройте SSL на стороне PostgreSQL и не указывайте
sslmodeв URL (в этом случае значение драйвера по умолчаниюpreferбудет успешно применено). - Поддерживаемые значения
sslmodeсоответствуют стандартной конвенции libpq (disable,allow,prefer,require,verify-ca,verify-full). Выберите значение, которое соответствует фактической TLS-конфигурации базы данных.