Piattaforma di gestione PowerFlex: keycloak-0 registra un errore della sonda HTTP con statuscode: 503
Summary: Questo articolo illustra un problema in cui il pod keycloak-0 segnala un errore di controllo integrità a causa di problemi di connettività del database causati da una configurazione DNS errata. Questo problema interessa i servizi di autenticazione gestiti da keycloak ...
Symptoms
Scenario
Uno dei due pod Keycloak (qui keycloak-0) riscontra problemi di connettività con la banca dati, mentre keycloak-1 rimane funzionante.
Event I registri mostrano ripetuti errori della sonda di predisposizione.
# 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
Il driver keycloak I registri pod indicano un errore nell'acquisizione delle connessioni JDBC a causa di un timeout di acquisizione:
# 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"}}]}
Impatto
Richieste di autenticazione gestite da keycloak-0 causare errori di autenticazione intermittenti o completi per la piattaforma di gestione PowerFlex.keycloak Il controllo integrità segnala continuamente un DOWN con impatto sull'high availability.
Cause
Il problema si verifica a causa di una configurazione DNS errata.
La connessione JDBC utilizzata da keycloak La connessione al database si basa sulla risoluzione del nome host o dell'endpoint del database.
Qualsiasi configurazione errata o errore nella risoluzione dei nomi host può causare timeout quando si tenta di stabilire una connessione.
Resolution
1) Correggere la configurazione DNS in base alla documentazione del sistema operativo
a) Se RedHat o CentOS v7,x o v8,x,
i) Modifica /etc/resolv.conf per aggiornare il server DNS corretto su ogni MVM (MgmtVMs)
ii) Cancellare il coredns cialde (rke2-coredns-rke2-coredns-xxxxxxxxxx-xxxxx) per propagare le modifiche a tali pod:
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) Verificare che le modifiche DNS si riflettano ora in coredns cialde (ci sono 2 coredns pod responsabili del 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) Se SLES v15.xe versioni successive, contattare il supporto per seguire l'articolo interno https://www.dell.com/support/kbdoc/en-us/000227354
2) Riavvia keycloak Baccelli
kubectl rollout restart statefulset keycloak -n powerflex
3) Monitorare keycloak Registri per eventuali problemi aggiuntivi di connettività del database
kubectl logs keycloak-0 -n powerflex [-f] kubectl logs keycloak-1 -n powerflex [-f]