1.3. ヘルスチェックを使用する
Red Hat build of Keycloak のコンテナーイメージから curl やその他のパッケージを削除するセキュリティー対策が講じられたため、コンテナー内から HTTPS エンドポイントに対するチェックを実行することはできません。
コンテナー内で Red Hat build of Keycloak を使用していない、またはコンテナー外でヘルスチェックを実行している場合は、任意のツールを使用して、ヘルスチェックエンドポイントにアクセスします。
1.3.1. curl リンクのコピーリンクがクリップボードにコピーされました!
シンプルな HTTP HEAD 要求を使用して、Red Hat build of Keycloak の状態が live か ready かを判断できます。curl は、この目的に適した HTTP クライアントです。
Red Hat build of Keycloak がコンテナーにデプロイされている場合は、前述のセキュリティー対策のため、カスタムイメージを使用するか、コンテナーの外部からこのコマンドを実行する必要があります。以下に例を示します。
curl --head -fsS http://localhost:9000/health/ready
curl --head -fsS http://localhost:9000/health/ready
コマンドがステータス 0 を返した場合、呼び出したエンドポイントに応じて Red Hat build of Keycloak は live または ready になります。それ以外の場合は問題があります。
1.3.2. Kubernetes リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes が外部からヘルスエンドポイントをモニタリングできるように、HTTP Probe を定義してください。liveness コマンドは使用しないでください。
https-client-auth を required に設定して mTLS を設定すると、この設定は管理インターフェイスによって継承されます。ヘルスエンドポイントに対して HTTP の利用を別途設定していない場合は、プローブリクエストに対して有効なクライアント証明書が要求されないように、https-management-client-auth を request または none に設定することが望ましいでしょう。
1.3.3. HEALTHCHECK リンクのコピーリンクがクリップボードにコピーされました!
Containerfile イメージの HEALTHCHECK 命令は、コンテナーの実行中にコンテナー内で定期的に実行されるコマンドを定義します。Red Hat build of Keycloak コンテナーには CLI HTTP クライアントがインストールされていませんが、TCP ソケットへのリダイレクトに BASH サポートを活用し、ヘルスチェックエンドポイントへの簡単な HTTP リクエストを作成することは可能です。
{ printf 'HEAD /health/ready HTTP/1.0\r\n\r\n' >&0; grep 'HTTP/1.0 200'; } 0<>/dev/tcp/localhost/9000
{ printf 'HEAD /health/ready HTTP/1.0\r\n\r\n' >&0; grep 'HTTP/1.0 200'; } 0<>/dev/tcp/localhost/9000
上記のコードは、http-relative-path (http-management-relative-path) および http-management-port などの Red Hat build of Keycloak オプションの値に依存します。これらが変更された場合は、それに応じてコードを変更する必要があります。
TLS の設定 に示されているように TLS を有効にすると、管理インターフェイスでも TLS が使用されます。管理インターフェイスのエンドポイントの使用方法に応じて、以下の条件を満たせば、引き続きプレーンな HTTP ヘルスチェックを行うことができます。
-
http-management-schemeをhttpに設定することで、管理インターフェイスが HTTPS ではなく HTTP を使用している場合。 -
または、
http-management-health-enabledをfalseに設定してメインインターフェイスのヘルスチェックを有効にし、http-enabledをtrueに設定して HTTP 経由でアクセスできるようにする場合。このシナリオでは、HTTP ポート (デフォルトは 8080) またはヘルスエンドポイント (デフォルトは /health) への外部トラフィックは、プロキシーによって許可されません。