PowerFlex管理プラットフォーム:keycloak-0ログのHTTPプローブがステータスコード: 503
Summary: この記事では、誤ったDNS構成によって引き起こされたデータベース接続の問題が原因で、keycloak-0ポッドがヘルス チェックの失敗を報告する問題について説明します。この問題は、Keycloakによって管理される認証サービスに影響します
Symptoms
シナリオ
2つのKeycloakポッドのうちの1つ(ここでは 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 Management Platformの断続的または完全な認証失敗を引き起こします。keycloak ヘルス チェックでは、継続的に DOWN ステータスに影響し、高可用性に影響を与えます。
Cause
この問題は、DNS構成が正しくないために発生します。
によって使用されるJDBC接続 keycloak データベースへの接続は、データベースのホスト名またはエンドポイントの解決に依存しています。
ホスト名解決の設定ミスや障害があると、接続を確立しようとしたときにタイムアウトが発生する可能性があります。
Resolution
1)オペレーティング システムのドキュメントに従ってDNS構成を修正します
a) RedHat または CentOS v7,x または v8,x の場合、
i) 編集 /etc/resolv.conf 各MgmtVM (MVM)の正しい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を担当するポッド):
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]