文章目錄
- 開源身份和訪問管理方案之keycloak(三)
- keycloak健康檢查
- 啟用運行狀況檢查
- 健康檢查使用
- Kubernetes下健康檢查
- Dockerfile 中 HEALTHCHECK 指令 健康檢查
- Docker HEALTHCHECK 和 Kubernetes 探針
開源身份和訪問管理方案之keycloak(三)
keycloak健康檢查
官方文檔:https://www.keycloak.org/observability/health
Keycloak 內置了對健康檢查的支持。本指南介紹如何啟用和使用 Keycloak 運行狀況檢查。 默認情況下,Keycloak 運行狀況檢查在管理端口 9000 上公開。
啟用運行狀況檢查
以使用構建時選項 health-enabled
啟用運行狀況檢查:
默認情況下,運行狀況終端節點不會返回任何檢查。
bin/kc.[sh|bat] build --health-enabled=true
bin/kc.sh start-dev --health-enabled=true
配置完成后,
# curl -fsS http://localhost:9000/health
{"status": "UP","checks": []
}
Keycloak 公開了 4 個運行狀況端點:
- /health/live
- /health/ready
- /health/started
- /health
請參閱 Quarkus SmallRye Health 文檔,了解有關每個端點含義的信息。
Keycloak 使用 Quarkus 構建,而健康檢查功能由 Quarkus SmallRye Health 提供。
這意味著 Keycloak 并沒有自己從頭開始實現健康檢查功能,而是使用了 Quarkus 提供的 SmallRye Health 組件。
健康檢查使用
建議通過外部 HTTP 請求來監控健康端點。由于安全措施,Keycloak 容器鏡像中移除了 curl 等軟件包,因此基于本地命令的監控將無法輕松實現。
如果將KeyCloak部署在容器中,則由于前面提到的安全措施,必須從外部運行此命令。例如:
curl --head -fsS http://localhost:9000/health/ready
Kubernetes下健康檢查
定義一個 HTTP 探針,以便 Kubernetes 可以從外部監控健康端點。不要使用存活命令。
Dockerfile 中 HEALTHCHECK 指令 健康檢查
Kubernetes 探針是 Kubernetes 層面的健康檢查機制。HEALTHCHECK 是 Docker 層面的健康檢查機制。
HEALTHCHECK
指令定義了一個命令,這個命令會在容器運行時定期執行。目的是檢查容器內部的應用程序是否健康運行。
keycloak 容器默認情況下沒有安裝任何命令行 HTTP 客戶端工具(比如 curl)。這意味著你無法直接使用 HEALTHCHECK 指令來發送 HTTP 請求,從而檢查 Keycloak 服務是否正常響應。
建議你安裝 curl 這個工具。安裝方法可以參考 Keycloak 官方提供的容器運行指南。
注意: 安裝額外的工具(比如 curl)可能會降低容器的安全性。你需要權衡一下便利性和安全性。
以下是一個簡單的 HEALTHCHECK 示例,它使用 curl 命令檢查容器內的 Web 服務是否正常運行:
HEALTHCHECK --interval=5s --timeout=3s --retries=3 \CMD curl -f http://localhost/ || exit 1
在這個例子中:
每 5 秒執行一次健康檢查。
如果 curl 命令在 3 秒內未完成,則視為超時。
如果連續 3 次檢查失敗,容器會被標記為不健康。
注意事項
命令返回值:健康檢查命令必須返回 0(成功)或 1(失敗),其他返回值會被視為失敗。
指令解析
- HEALTHCHECK:Dockerfile 中的指令,用于定義容器的健康檢查機制。
- –interval=5s:設置健康檢查的時間間隔為 5 秒。Docker 會每 5 秒執行一次健康檢查命令。
- –timeout=3s:設置健康檢查命令的超時時間為 3 秒。如果命令在 3 秒內未完成,則視為超時。
- –retries=3:設置健康檢查失敗的重試次數為 3 次。如果連續 3 次檢查失敗,容器會被標記為不健康。
- CMD curl -f http://localhost/ || exit 1:定義健康檢查的命令。curl -f 會嘗試訪問 http://localhost/,如果請求失敗(返回非 2xx 狀態碼),curl 會返回非零值,觸發 exit 1,表示健康檢查失敗。
-f 是一個常用的選項,全稱為 --fail。它的作用是讓 curl 在 HTTP 請求失敗時(即服務器返回的狀態碼為 400 或更高)返回一個非零的退出碼,而不是正常返回。
Docker HEALTHCHECK 和 Kubernetes 探針
HEALTHCHECK 可以用于容器內部的簡單檢查,而 Kubernetes 探針用于集群層面的健康管理。
在 Kubernetes 中,通常建議優先使用 Kubernetes 探針,因為它更靈活且與 Kubernetes 功能深度集成。