调试 Keycloak

通过将本地机器上的调试器连接到 minikube 内部的 Keycloak,分析开发期间的问题。 在 minikube 中运行的 Keycloak 版本 是先决条件。

概述

Keycloak 的部署默认启用调试,并在 minikube 上打开节点端口 30012。开发人员使用其本地 IDE 连接到在 minikube 中运行的 Keycloak 实例,使用 JVM 远程调试会话。

所有端口都指定为不带端口偏移量。如果您正在使用配置选项 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 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