k8s部署keycloak高可用集群及使用
内容提要
Keycloak是一个开源的身份和访问管理解决方案,提供单点登录、身份验证和授权服务。它支持多种身份验证方式和访问控制方法,易于集成到各种应用程序和平台。
延伸解读
集群通信与数据共享机制
Keycloak 集群依赖 Infinispan 分布式缓存实现节点间数据共享,默认使用 7800 端口通信。在 Kubernetes 部署中,需通过一个 headless Service(如 keycloak-discovery)暴露该端口,并设置 publishNotReadyAddresses: true,确保 Pod 未就绪时也能被其他节点发现。StatefulSet 的启动参数中通过 -Djgroups.dns.query 指定该 Service 的 DNS 名称,使各节点能自动组建集群。若忽略此配置,节
反向代理模式选择:edge 与 passthrough
KC_PROXY 环境变量控制 Keycloak 与反向代理的通信方式。edge 模式下,反向代理处理 TLS,Keycloak 仅使用 HTTP,适合内网可信环境;passthrough 模式下,Keycloak 直接处理 HTTPS,适合内网安全性较低的场景。文章示例采用 edge 模式,并在负载均衡器上配置 HTTPS,内网 Keycloak 无需处理 TLS。选择时需权衡内网安全性与配置复杂度,若内网可信且希望简化 Keycloak 配置,edge 模式更合适。
部署实践与版本注意事项
文章使用 Keycloak 25.0.1 版本,通过 StatefulSet 部署 3 个副本,并连接外部 MySQL 数据库。数据库凭据通过 Secret 注入,避免硬编码。部署后需将负载均衡器的后端指向 NodePort(如 30222)。需特别注意:Keycloak 25.0.1 的健康检查路径与旧版本不同,沿用旧路径会返回 404,需根据新版本调整探针配置,否则可能导致 Pod 无法正常就绪。
Q&A
Keycloak是什么?
Keycloak是一个开源的身份和访问管理解决方案,提供单点登录、身份验证和授权服务。
Keycloak支持哪些身份验证方式?
Keycloak支持用户名/密码、社交登录、SAML、OAuth和OpenID Connect等多种身份验证方式。
如何在Kubernetes中部署Keycloak高可用集群?
在Kubernetes中部署Keycloak高可用集群需要配置Infinispan和KC_PROXY,并使用edge模式。
Keycloak的KC_PROXY设置有什么作用?
KC_PROXY设置控制Keycloak与反向代理之间的通信方式,支持edge和passthrough模式。
Keycloak的edge模式和passthrough模式有什么区别?
edge模式由反向代理处理HTTPS,Keycloak使用HTTP;passthrough模式则由Keycloak直接处理HTTPS请求。
如何创建Keycloak的数据库访问账号密码?
使用命令kubectl create secret -n keycloak generic keycloak-db-secret --from-literal=username=keycloak --from-literal=password=yourpassword创建数据库访问账号密码。