Keycloak 健康检查

当客户在他们的环境中运行 跨站点设置 时,他们应该能够将他们的监控指向特定的 URL,以查看一切是否按预期正常运行。

此页面试图概述从 Keycloak 的跨站点设置派生的此类 URL、Kubernetes 资源和健康检查端点。

概述

主动监控策略旨在在问题影响用户之前检测和警报,对于高度弹性和高可用性的 Keycloak 应用程序至关重要。

跨各种架构组件(如应用程序健康状况、负载均衡、缓存和整体系统状态)的健康检查对于

  • 确保高可用性:通过验证所有站点和负载均衡器是否正常运行,它有助于保证即使一个站点出现故障,系统也能处理请求。

  • 保持性能:检查 Infinispan 缓存的健康状况和分布确保 Keycloak 可以通过有效地处理会话和其他临时数据来保持最佳性能。

  • 运营弹性:通过持续监控 OpenShift 环境中 Keycloak 及其依赖项的运行状况,系统可以快速识别并可能自动修复问题,从而减少停机时间。

如何设置

先决条件

  1. 已安装和配置 OpenShift CLI.

  2. 如果您的操作系统上尚未安装,请安装 jq

更多关于特定健康检查的信息

Keycloak 负载均衡器和站点

通过其负载均衡器以及主站点和备份站点验证 Keycloak 应用程序的运行状况。这确保 Keycloak 可访问,并且负载均衡机制在不同的地理位置或网络位置之间正常运行。

此命令返回 Keycloak 应用程序与其配置数据库的连接的健康状况,从而确认数据库连接的可靠性。这仅在管理端口上可用,而在外部 URL 上不可用。在 Kubernetes 设置中,子状态 health/ready 会定期检查,以使 Pod 处于就绪状态。

curl -s https://keycloak:managementport/health

此命令验证负载均衡器的 lb-check 端点,并确保 Keycloak 应用程序集群正在运行。

curl -s https://keycloak-load-balancer-url/lb-check

这些命令将返回跨站点设置 (无论是非活动/被动还是活动/活动) 中 Keycloak 的站点 A 和站点 B 的运行状态。

curl -s https://keycloak_site_a_url/lb-check
curl -s https://keycloak_site_b_url/lb-check

Infinispan 缓存健康状况

检查外部 Infinispan 集群中默认缓存管理器和各个缓存的运行状况。这对于 Keycloak 的性能和可靠性至关重要,因为 Infinispan 通常用于 Keycloak 部署中的分布式缓存和会话集群。

此命令返回 Infinispan 缓存管理器的整体健康状况,这很有用,因为管理员用户无需提供用户凭据即可获取健康状况。

curl -s https://infinispan_rest_url/rest/v2/cache-managers/default/health/status

而对于这些健康检查,管理员用户需要在请求中提供 infinispan 用户凭据,以了解外部 Infinispan 集群缓存的整体健康状况。

curl -u <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cache-managers/default/health \
 | jq 'if .cluster_health.health_status == "HEALTHY" and (all(.cache_health[].status; . == "HEALTHY")) then "HEALTHY" else "UNHEALTHY" end'

您可以选择运行上述命令而不使用 jq 过滤器 'if .cluster_health.health_status == "HEALTHY" and (all(.cache_health[].status; . == "HEALTHY")) then "HEALTHY" else "UNHEALTHY" end' 来查看完整详细信息,此过滤器用于根据各个缓存的健康状况计算整体健康状况。

Infinispan 集群分布

评估 Infinispan 集群的分布健康状况,确保集群的节点正确地分布数据。此步骤对于缓存层的可扩展性和容错性至关重要。

您可以修改 expectedCount 3 参数以匹配集群中的总节点数,并验证它们是否健康。

curl <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cluster\?action\=distribution \
 | jq --argjson expectedCount 3 'if map(select(.node_addresses | length > 0)) | length == $expectedCount then "HEALTHY" else "UNHEALTHY" end'

整体 Infinispan 系统健康状况

使用 OpenShift 的 CLI 工具查询指定命名空间中 Infinispan 集群和 Keycloak 服务的健康状况。此全面检查确保 Keycloak 部署的所有组件都在 OpenShift 环境中正常运行并配置正确。

oc get infinispan -n <NAMESPACE> -o json  \
| jq '.items[].status.conditions' \
| jq 'map({(.type): .status})' \
| jq 'reduce .[] as $item ([]; . + [keys[] | select($item[.] != "True")]) | if length == 0 then "HEALTHY" else "UNHEALTHY: " + (join(", ")) end'

OpenShift 中的 Keycloak 就绪状态

具体来说,检查 Red Hat OpenShift 中 Keycloak 部署的就绪状态和滚动更新条件,确保 Keycloak 实例完全运行并且没有进行可能影响可用性的更新。

oc wait --for=condition=Ready --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
oc wait --for=condition=RollingUpdate=False --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>

可选 Bash 脚本

您可以使用 cross-site-health-checks.sh 脚本并扩展它来执行必要的检查,并将此集成到您的监控架构中。

要运行脚本,作为先决条件,您需要从终端到目标 OCP 集群建立一个会话,并使用一个命令。

oc login --token=sha256~masked-key --server=https://api.gh-keycloak-a.masked.openshiftapps.com:6443

另请注意,需要针对集群组中的所有集群运行此脚本,因此管理员必须对所有集群重复上述 oc 登录命令,这可以自动化。

要运行脚本本身,一旦您拥有一个活动的 oc 会话,以下是一个示例用法。

./cross-site-health-checks.sh \
-n runner-keycloak \
-l <KEYCLOAK_LB_URL> \
-k <KEYCLOAK_SITE_URL> \
-i <KEYCLOAK_ISPN_REST_URL> \
-u developer \
-p <ISPN_REST_URL_PWD> \
-c 3

Verify the Keycloak Load Balancer health check
Checking health for: KEYCLOAK_LB_URL/lb-check
"HEALTHY"

Verify the Load Balancer health check on the Site
Checking health for: KEYCLOAK_SITE_URL/lb-check
"HEALTHY"

Verify the default cache manager health in external ISPN
Checking health for: KEYCLOAK_ISPN_REST_URL/rest/v2/cache-managers/default/health/status
"HEALTHY"

Verify individual cache health
"HEALTHY"

ISPN Cluster Distribution
"HEALTHY"

ISPN Overall Status
"HEALTHY"

Verify for Keycloak condition in ROSA cluster
keycloak.k8s.keycloak.org/keycloak condition met
keycloak.k8s.keycloak.org/keycloak condition met

脚本的使用情况,以及有关不同选项的详细信息

Usage: [-n namespace] [-l keycloak_lb_url] [-k keycloak_site_url]
[-i infinispan_rest_url] [-u infinispan_user] [-p infinispan_pwd]
[-c expected_ispn_count]

  -n namespace: Kubernetes namespace
  -l keycloak_lb_url: Keycloak Load Balancer URL
  -k keycloak_site_url: Keycloak Site URL
  -i infinispan_rest_url: Infinispan REST URL
  -u infinispan_user: Infinispan user
  -p infinispan_pwd: Infinispan password
  -c expected_ispn_count: Expected Node Count in the Infinispan cluster