Powerflex 관리 플랫폼: keycloak-0 logs HTTP probe failed with statuscode: 503
Summary: 이 문서에서는 keycloak-0 Pod가 잘못된 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 각 MVM(MgmtVM)에서 올바른 DNS 서버를 업데이트합니다.
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를 담당하는 Pod):
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]