Keycloakのデバッグ

ローカルマシンのデバッガーをminikube内のKeycloakに接続して、開発中の問題を分析します。minikube内のKeycloakの実行バージョンが前提条件です。

概要

Keycloakのデプロイメントでは、デフォルトでデバッグが有効になっており、minikubeのノードポート30012を開きます。開発者はローカルIDEを使用して、JVMリモートデバッグセッションを使用してminikubeで実行されているKeycloakインスタンスに接続します。

すべてのポートはポートオフセットなしで指定されています。構成オプションKC_PORT_OFFSETを使用している場合は、ポート番号にオフセットを追加する必要があります。ポートオフセットXX(00〜26)およびポート番号300YYの場合、結果のポートは3XXYYになります。
minikube runtime view debug keycloak.dio

セットアップ方法

前提条件

  1. Keycloakがインストールされ、minikubeで実行されていること

  2. ローカルマシン上のJava IDE。デバッグするKeycloakのデプロイ済みバージョンに一致するチェックアウトされたKeycloakリポジトリ、または開発者がデバッグしたいKeycloakにインストールされたプロバイダーのチェックアウトされたリポジトリのいずれかが必要です。

リモートデバッグのセットアップ

  1. コマンドラインでminikube ipを呼び出して、minikubeのIPアドレスを特定します。

  2. 前の手順で取得したIPアドレスとポート番号30012を使用して、ホスト名でリモートデバッグをセットアップします。

minikubeのIPアドレスは、minikubeインスタンスが再作成されるたびに変更されます。
すべてのポートはポートオフセットなしで指定されています。構成オプションKC_PORT_OFFSETを使用している場合は、ポート番号にオフセットを追加する必要があります。ポートオフセットXX(00〜26)およびポート番号300YYの場合、結果のポートは3XXYYになります。

コマンドminikube ip192.168.39.39を返したと仮定すると、IntelliJからのスクリーンショットの例を以下に示します。

keycloak debugging

IntelliJでのリモートデバッグの詳細をご覧ください。

Keycloakをリモートデバッグする際の注意点

  • minikubeでKeycloakの複数のレプリカを実行している場合、IDEはランダムなインスタンスに接続します。

  • Keycloakインスタンスが再起動する(たとえば、再デプロイメントのため)と、IDEは自動的に切断され、開発者はデバッグセッションを再開する必要があります。

  • すべてのスレッドを中断するブレークポイントを作成すると、KubernetesのLivenessプローブを提供するスレッドも中断されます。プローブは最終的にタイムアウトし、Kubernetesはデバッグセッション中に予期せずKeycloakポッドを再起動します。

    代わりに、現在のスレッドのみを中断するブレークポイントを作成します。IntelliJでは、次の手順で行います。

    1. ブレークポイントを右クリックします。

    2. 現在のブレークポイントに合わせて調整します。

    3. 次に、それを今後のすべてのブレークポイントのデフォルトにします。

      keycloak breakpoint