调试 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. 在 Minikube 上安装并运行 Keycloak

  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 ip 返回 192.168.39.39,请查看下面来自 IntelliJ 的示例截图。

keycloak debugging

阅读有关 IntelliJ 中的远程调试 的更多信息。

在远程调试 Keycloak 时的注意事项

  • 在 minikube 中运行多个 Keycloak 副本时,IDE 会连接到一个随机实例。

  • Keycloak 实例重启时(例如,由于重新部署),IDE 会自动断开连接,开发人员需要重新启动调试会话。

  • 创建挂起所有线程的断点时,这也会挂起为 Kubernetes 存活探测提供服务的线程。探测最终会超时,Kubernetes 会在调试会话期间意外重启 Keycloak pod。

    相反,请创建仅挂起当前线程的断点。在 IntelliJ 中,请执行以下操作:

    1. 右键单击断点。

    2. 针对当前断点进行调整。

    3. 然后将其设为所有未来断点的默认值。

      keycloak breakpoint