1.3. 使用健康检查
由于安全措施,从红帽构建的 Keycloak 容器镜像中删除 curl 和其他软件包,您将无法从容器中对 HTTPS 端点运行检查。
如果您没有在容器中使用红帽构建的 Keycloak,或者运行容器外的健康检查,请使用任何工具来访问健康检查端点。
1.3.1. curl 复制链接链接已复制到粘贴板!
您可以使用简单的 HTTP HEAD 请求来确定红帽构建的 Keycloak 的实时或 就绪状态。curl 是适合此目的的 HTTP 客户端。
如果红帽构建的 Keycloak 部署在容器中,则必须使用自定义镜像或从它外部运行此命令,因为前面提到的安全措施。例如:
curl --head -fsS http://localhost:9000/health/ready
curl --head -fsS http://localhost:9000/health/ready
如果命令返回状态为 0,则红帽构建的 Keycloak 为 live 或 ready,具体取决于您调用的端点。否则,会出现问题。
1.3.2. Kubernetes 复制链接链接已复制到粘贴板!
定义一个 HTTP 探测,以便 Kubernetes 可以在外部监控健康端点。不要使用 liveness 命令。
如果您将 mTLS 配置为 所需的 https-client-auth,则管理界面会继承此配置。如果您没有为健康端点配置 HTTP 使用 HTTP,您可能需要将 https-management-client-auth 设置为 request 或 none,以便探测请求不需要有效的客户端证书。
1.3.3. HEALTHCHECK 复制链接链接已复制到粘贴板!
Containerfile HEALTHCHECK 指令定义了一个命令,它将在运行时定期在容器内执行。虽然红帽构建的 Keycloak 容器没有安装任何 CLI HTTP 客户端,但可以利用 BASH 支持重定向到 TCP 套接字,并将简单的 HTTP 请求设置为 healthcheck 端点:
{ printf 'HEAD /health/ready HTTP/1.0\r\n\r\n' >&0; grep 'HTTP/1.0 200'; } 0<>/dev/tcp/localhost/9000
{ printf 'HEAD /health/ready HTTP/1.0\r\n\r\n' >&0; grep 'HTTP/1.0 200'; } 0<>/dev/tcp/localhost/9000
以上代码取决于红帽构建的 Keycloak 选项的值,如 http-relative-path (http-management-relative-path)和 http-management-port。如果更改这些代码,则需要相应地修改代码。
如果您启用 TLS,如 配置 TLS 所示,管理界面也会使用 TLS。根据您要使用管理界面端点的方式,您仍然可以具有普通 HTTP 健康检查:
-
管理接口使用 HTTP,而不是 HTTPS,将
http-management-scheme设置为http。 -
或者,通过将
http-management-health-enabled设置为false并通过 HTTP 访问(将http-enabled设为true),为主接口启用健康检查。在这种情况下,您的代理不允许到 HTTP 端口的外部流量(默认为 8080)或健康端点(默认为 /health)。