PowerFlex: HTTP-Test ist mit Statuscode fehlgeschlagen: 503
概要: 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 ...
現象
Einer der beiden Keycloak Pods (hier keycloak-0) Konnektivitätsprobleme mit der Datenbank auftreten, während keycloak-1 funktionsfähig bleibt.
Ereignisprotokolle 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
Die Keycloak-Pod-Protokolle zeigen einen Fehler beim Abrufen von JDBC-Verbindungen aufgrund eines Akquisitionstimeouts an:
# 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 und führt zu zeitweiligen oder vollständigen Authentifizierungsfehlern für das PFMP.
Die Keycloak-Integritätsprüfung meldet kontinuierlich eine DOWN was sich auf die Hochverfügbarkeit auswirkt.
原因
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.
解決方法
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 Artikel PowerFlex 4.x – Anleitung zum Aktualisieren von DNS-Servern 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]
Betroffene Versionen
Kein Produktproblem