curl -s https://keycloak:managementport/health
Kubernetes 環境で マルチサイトデプロイメント を実行している場合、すべてが期待どおりに稼働しているかを確認するためにチェックを自動化する必要があります。
このページでは、Keycloak のマルチサイト構成を検証するために利用できる URL、Kubernetes リソース、およびヘルスチェックエンドポイントの概要について説明します。
プロアクティブな監視戦略は、ユーザーに影響を与える前に問題を検出し、警告することを目的としています。この戦略は、高回復力と高可用性を備えた Keycloak アプリケーションを実現するための鍵となります。
アプリケーションのヘルス、ロードバランシング、キャッシング、システム全体のステータスなど、さまざまなアーキテクチャコンポーネントにわたるヘルスチェックは、以下にとって重要です。
すべてのサイトとロードバランサーが稼働していることを検証することは、あるサイトがダウンした場合でもシステムがリクエストを処理できることを保証するための鍵となります。
Infinispan キャッシュのヘルスと分散をチェックすることで、Keycloak がセッションやその他の一時データを効率的に処理することにより、最適なパフォーマンスを維持できるようにします。
Kubernetes 環境内の Keycloak とその依存関係の両方のヘルスを継続的に監視することにより、システムは問題を迅速に特定し、場合によっては自動的に修復して、ダウンタイムを削減できます。
オペレーティングシステムに jq がまだインストールされていない場合はインストールしてください。
Keycloak アプリケーションのヘルスを、ロードバランサーとプライマリサイトおよびバックアップサイトの両方を介して検証します。これにより、Keycloak がアクセス可能であり、ロードバランシングメカニズムが異なる地理的またはネットワークロケーション間で正しく機能していることが保証されます。
このコマンドは、Keycloak アプリケーションが構成済みのデータベースへの接続のヘルスステータスを返し、データベース接続の信頼性を確認します。このコマンドは、管理ポートでのみ利用可能であり、外部 URL からは利用できません。Kubernetes セットアップでは、サブステータス health/ready
が Pod を ready にするために定期的にチェックされます。
curl -s https://keycloak:managementport/health
このコマンドは、ロードバランサーの lb-check
エンドポイントを検証し、Keycloak アプリケーションクラスターが起動して実行中であることを保証します。
curl -s https://keycloak-load-balancer-url/lb-check
これらのコマンドは、マルチサイト構成における Keycloak のサイト A およびサイト B の実行ステータスを返します。
curl -s https://keycloak_site_a_url/lb-check
curl -s https://keycloak_site_b_url/lb-check
外部 Infinispan クラスター内のデフォルトキャッシュマネージャーと個々のキャッシュのヘルスをチェックします。このチェックは、Keycloak のパフォーマンスと信頼性にとって不可欠です。Infinispan は、Keycloak デプロイメントにおける分散キャッシングとセッションクラスタリングによく使用されるためです。
このコマンドは、Infinispan キャッシュマネージャーの全体的なヘルスを返します。これは、管理者ユーザーがヘルスステータスを取得するためにユーザー資格情報を提供する必要がないため便利です。
curl -s https://infinispan_rest_url/rest/v2/cache-managers/default/health/status
上記のヘルスチェックとは対照的に、以下のヘルスチェックでは、管理者ユーザーが外部 Infinispan クラスターキャッシュの全体的なヘルスを覗き見するために、リクエストの一部として Infinispan ユーザー資格情報を提供する必要があります。
curl -u <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cache-managers/default/health \
| jq 'if .cluster_health.health_status == "HEALTHY" and (all(.cache_health[].status; . == "HEALTHY")) then "HEALTHY" else "UNHEALTHY" end'
jq
フィルターは、個々のキャッシュヘルスに基づいて全体的なヘルスを計算するための便利な機能です。jq
フィルターなしで上記のコマンドを実行して、詳細な情報を確認することもできます。
Infinispan クラスターの分散ヘルスを評価し、クラスターのノードがデータを正しく分散していることを保証します。このステップは、キャッシングレイヤーのスケーラビリティとフォールトトレランスにとって不可欠です。
expectedCount 3
引数を変更して、クラスター内のノードの合計数に合わせて、それらが正常であるかどうかを検証できます。
curl <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cluster\?action\=distribution \
| jq --argjson expectedCount 3 'if map(select(.node_addresses | length > 0)) | length == $expectedCount then "HEALTHY" else "UNHEALTHY" end'
kubectl
CLI ツールを使用して、指定された名前空間内の Infinispan クラスターと Keycloak サービスのヘルスステータスをクエリします。この包括的なチェックにより、Keycloak デプロイメントのすべてのコンポーネントが Kubernetes 環境内で稼働しており、正しく構成されていることが保証されます。
kubectl get infinispan -n <NAMESPACE> -o json \
| jq '.items[].status.conditions' \
| jq 'map({(.type): .status})' \
| jq 'reduce .[] as $item ([]; . + [keys[] | select($item[.] != "True")]) | if length == 0 then "HEALTHY" else "UNHEALTHY: " + (join(", ")) end'
具体的には、Kubernetes における Keycloak デプロイメントの readiness とローリングアップデートの状況をチェックし、Keycloak インスタンスが完全に稼働しており、可用性に影響を与える可能性のあるアップデートを受けていないことを保証します。
kubectl wait --for=condition=Ready --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
kubectl wait --for=condition=RollingUpdate=False --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>