PowerFlex Management Platform: keycloak-0-Protokolle HTTP-Test mit Statuscode fehlgeschlagen: 503
Summary: In diesem Artikel wird ein Problem erläutert, bei dem der keycloak-0-Pod einen Fehler bei der Integritätsprüfung aufgrund von Datenbankverbindungsproblemen meldet, die durch eine falsche DNS-Konfiguration verursacht werden. Dieses Problem wirkt sich auf Authentifizierungsservices aus, die von Keycloak verwaltet werden ...
Symptoms
Beispiel
Einer der beiden Keycloak Pods (hier keycloak-0) Konnektivitätsprobleme mit der Datenbank auftreten, während keycloak-1 funktionsfähig bleibt.
Event Protokolle zeigen wiederholte Fehler bei der Bereitschaftsprüfung an.
# 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
Der Service keycloak Pod-Protokolle weisen auf einen Fehler beim Abrufen von JDBC-Verbindungen aufgrund eines Erfassungs-Timeouts hin:
# 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"}}]}
Auswirkungen
Authentifizierungsanforderungen, die von bearbeitet werden keycloak-0 schlägt fehl, was zu zeitweiligen oder vollständigen Authentifizierungsfehlern für die PowerFlex Management Platform führt.keycloak Die Integritätsprüfung meldet kontinuierlich eine DOWN was sich auf die Hochverfügbarkeit auswirkt.
Cause
Das Problem tritt aufgrund einer falschen DNS-Konfiguration auf.
Die JDBC-Verbindung, die von verwendet wird keycloak Das Herstellen einer Verbindung zur Datenbank hängt von der Auflösung des Datenbankhostnamens oder -endpunkts ab.
Jede Fehlkonfiguration oder jeder Fehler bei der Auflösung von Hostnamen kann beim Versuch, eine Verbindung herzustellen, zu Timeouts führen.
Resolution
1) Korrigieren Sie die DNS-Konfiguration gemäß der Dokumentation des Betriebssystems.
a) Wenn RedHat oder CentOS v7,x oder v8,x,
i) Bearbeiten /etc/resolv.conf So aktualisieren Sie den richtigen DNS-Server auf jedem MgmtVMs (MVMs)
ii) Streichen Sie die coredns Pods (rke2-coredns-rke2-coredns-xxxxxxxxxx-xxxxx), um die Änderungen an diese Pods weiterzugeben:
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) Überprüfen Sie, ob DNS-Änderungen jetzt in der coredns Pods (es gibt 2 coredns Pods, die für DNS verantwortlich sind):
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) Wenn SLES v15.xund höher, wenden Sie sich an den Support, um den internen Artikel https://www.dell.com/support/kbdoc/en-us/000227354 zu befolgen.
2) Neustart keycloak hülsen
kubectl rollout restart statefulset keycloak -n powerflex
3) Überwachen keycloak Protokolle für alle zusätzlichen Probleme mit der Datenbankverbindung
kubectl logs keycloak-0 -n powerflex [-f] kubectl logs keycloak-1 -n powerflex [-f]