Платформа управління Powerflex: keycloak-0 logs HTTP-зонд не вдалося зі статус-кодом: 503
Summary: У цій статті пояснюється проблема, через яку блок keycloak-0 повідомляє про збій перевірки працездатності через проблеми з підключенням до бази даних, спричинені неправильною конфігурацією DNS. Ця проблема впливає на служби автентифікації, якими керує keycloak ...
Symptoms
Сценарій
Одна з двох капсул Keycloak (тут keycloak-0) має проблеми з підключенням до бази даних, тоді як keycloak-1 залишається функціональним.
Event Журнали показують повторні збої датчика готовності.
# kubectl get pods -n powerflex | egrep keycloak
keycloak-0 1/1 Running 0 22d
keycloak-1 1/1 Running 0 22d
# kubectl get events | egrep kube
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 12m (x58 over 17h) keycloak-0 Readiness probe failed: HTTP probe failed with statuscode: 503
Об'єкт keycloak Журнали pod вказують на неможливість отримання з'єднань JDBC через тайм-аут збору:
# kubectl get logs keycloak-0 -n powerflex
..
2024-11-27 07:01:41,593 INFO [org.infinispan.CLUSTER] (non-blocking-thread--p2-t126) [Context=actionTokens] ISPN100010: Finished rebalance with members [keycloak-0-17437, keycloak-1-41022], topology id 7
2024-11-27 07:31:03,379 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Timer-0) SQL Error: 0, SQLState: null
2024-11-27 07:31:03,379 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Timer-0) Acquisition timeout while waiting for new connection
2024-11-27 07:31:03,384 ERROR [org.keycloak.services.scheduled.ScheduledTaskRunner] (Timer-0) Failed to run scheduled task ClearExpiredEvents: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at java.base/java.util.TimerThread.run(Timer.java:506)
Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection <---------
..
Caused by: java.sql.SQLException: Acquisition timeout while waiting for new connection <---------
..
Caused by: java.util.concurrent.TimeoutException <---------
..
2024-11-27 09:31:03,476 INFO [io.smallrye.health] (executor-thread-15) SRHCK01001: Reporting health down status: {"status":"DOWN","checks":[{"name":"Keycloak database connections health check","status":"DOWN","data":{"Failing since":"2024-11-27 07:31:03,477"}}]}
2024-11-27 09:56:03,477 INFO [io.smallrye.health] (executor-thread-15) SRHCK01001: Reporting health down status: {"status":"DOWN","checks":[{"name":"Keycloak database connections health check","status":"DOWN","data":{"Failing since":"2024-11-27 07:31:03,477"}}]}
Вплив
Запити на автентифікацію, які обробляють keycloak-0 збій, що спричиняє періодичні або повні збої автентифікації для платформи керування PowerFlex.keycloak Перевірка стану здоров'я постійно повідомляє про DOWN статусу, що впливає на високу доступність.
Cause
Проблема виникає через неправильну конфігурацію DNS.
З'єднання JDBC, яке використовується keycloak Підключення до бази даних покладається на визначення імені хоста або кінцевої точки бази даних.
Будь-яка неправильна конфігурація або збій у роздільній здатності імені хоста може спричинити тайм-аути під час спроби встановити з'єднання.
Resolution
1) Виправте конфігурацію DNS відповідно до документації операційної системи
a) Якщо RedHat або CentOS v7,x або v8,x,
i) Редагувати /etc/resolv.conf щоб оновити правильний DNS-сервер на кожному MgmtVM (MVM)
ii) Видаліть файл coredns стручки (rke2-coredns-rke2-coredns-xxxxxxxxxx-xxxxx), щоб поширити зміни на ці стручки:
for x in `kubectl get pods -n kube-system | grep -i rke2-coredns-rke2-coredns | awk '{print $1}' | grep -iv auto`; do kubectl delete pods -n kube-system $x; done
iii) Переконайтеся, що зміни DNS тепер відображаються в coredns стручків (є 2 coredns подви, що відповідають за DNS):
for x in `kubectl get pods -n kube-system | grep -i rke2-coredns-rke2-coredns | awk '{print $1}' | grep -iv auto`; do echo $x; kubectl exec -it $x -n kube-system -- cat /etc/resolv.conf; echo " "; done
b) Якщо SLES v15.xі вище, залучіть підтримку, щоб слідувати внутрішнім статтю https://www.dell.com/support/kbdoc/en-us/000227354
2) Перезавантаження keycloak Стручки
kubectl rollout restart statefulset keycloak -n powerflex
3) Монітор keycloak журнали про будь-які додаткові проблеми з підключенням до бази даних
kubectl logs keycloak-0 -n powerflex [-f] kubectl logs keycloak-1 -n powerflex [-f]