Keycloakのデバッグ
ローカルマシンのデバッガーをminikube内のKeycloakに接続して、開発中の問題を分析します。minikube内のKeycloakの実行バージョンが前提条件です。
概要
Keycloakのデプロイメントでは、デフォルトでデバッグが有効になっており、minikubeのノードポート30012
を開きます。開発者はローカルIDEを使用して、JVMリモートデバッグセッションを使用してminikubeで実行されているKeycloakインスタンスに接続します。
すべてのポートはポートオフセットなしで指定されています。構成オプションKC_PORT_OFFSET を使用している場合は、ポート番号にオフセットを追加する必要があります。ポートオフセットXX(00〜26)およびポート番号300YYの場合、結果のポートは3XXYYになります。 |
セットアップ方法
前提条件
-
ローカルマシン上のJava IDE。デバッグするKeycloakのデプロイ済みバージョンに一致するチェックアウトされたKeycloakリポジトリ、または開発者がデバッグしたいKeycloakにインストールされたプロバイダーのチェックアウトされたリポジトリのいずれかが必要です。
リモートデバッグのセットアップ
-
コマンドラインで
minikube ip
を呼び出して、minikubeのIPアドレスを特定します。 -
前の手順で取得したIPアドレスとポート番号
30012
を使用して、ホスト名でリモートデバッグをセットアップします。
minikubeのIPアドレスは、minikubeインスタンスが再作成されるたびに変更されます。 |
すべてのポートはポートオフセットなしで指定されています。構成オプションKC_PORT_OFFSET を使用している場合は、ポート番号にオフセットを追加する必要があります。ポートオフセットXX(00〜26)およびポート番号300YYの場合、結果のポートは3XXYYになります。 |
コマンドminikube ip
が192.168.39.39
を返したと仮定すると、IntelliJからのスクリーンショットの例を以下に示します。

IntelliJでのリモートデバッグの詳細をご覧ください。
Keycloakをリモートデバッグする際の注意点
-
minikubeでKeycloakの複数のレプリカを実行している場合、IDEはランダムなインスタンスに接続します。
-
Keycloakインスタンスが再起動する(たとえば、再デプロイメントのため)と、IDEは自動的に切断され、開発者はデバッグセッションを再開する必要があります。
-
すべてのスレッドを中断するブレークポイントを作成すると、KubernetesのLivenessプローブを提供するスレッドも中断されます。プローブは最終的にタイムアウトし、Kubernetesはデバッグセッション中に予期せずKeycloakポッドを再起動します。
代わりに、現在のスレッドのみを中断するブレークポイントを作成します。IntelliJでは、次の手順で行います。
-
ブレークポイントを右クリックします。
-
現在のブレークポイントに合わせて調整します。
-
次に、それを今後のすべてのブレークポイントのデフォルトにします。
-