kubernetes - 无法登录高可用keycloak集群

标签 kubernetes keycloak kubernetes-helm bitnami

我正在使用 bitnami Helm 图表作为 keycloak。并尝试使用 DNS ping 通过 3 个 keycloak 副本实现高可用性。

Chart version: 5.2.8
Image version: 15.1.1-debian-10-r10
Helm repo: https://charts.bitnami.com/bitnami -> bitnami/keycloak

修改后的values.yaml文件参数如下:

global:
  image:
    registry: docker.io
    repository: bitnami/keycloak
    tag: 15.1.1-debian-10-r10
    pullPolicy: IfNotPresent
    pullSecrets: []
    debug: true

proxyAddressForwarding: true

serviceDiscovery:
  enabled: true
  protocol: dns.DNS_PING
  properties:
    - dns_query=keycloak.identity.svc.cluster.local  
  transportStack: tcp

cache:
  ownersCount: 3
  authOwnersCount: 3

replicaCount: 3

ingress:
  enabled: true
  hostname: my-keycloak.keycloak.example.com
  apiVersion: ""
  ingressClassName: "nginx"
  path: /
  pathType: ImplementationSpecific
  annotations: {}
  tls: false
  extraHosts: []
  extraTls: []
  secrets: []
  existingSecret: ""
  servicePort: http  

登录keycloak UI时,输入用户名和密码后,没有登录,重定向回登录页面。

从 Pod 日志中我看到以下错误:

0:07:05,251 WARN  [org.keycloak.events] (default task-1) type=CODE_TO_TOKEN_ERROR, realmId=master, clientId=security-admin-console, userId=null, ipAddress=10.244.5.46, error=invalid_code, grant_type=authorization_code, code_id=157e0483-67fa-4ea4-a964-387f3884cbc9, client_auth_method=client-secret

当我在论坛中检查此错误时,根据一些建议将 proxyAddressForwarding 设置为 true,但同样,问题仍然相同。

除此之外,我还尝试了其他版本的 Helm Chart,但是 UI 本身无法正确加载,并出现页面未找到错误。

更新

当我使用带入口的 headless 服务时,我在日志中收到上述错误,即CODE_TO_TOKEN_ERROR。但是如果我使用 ClusterIP 类型的服务和 ingress ,错误如下:

06:43:37,587 WARN  [org.keycloak.events] (default task-6) type=LOGIN_ERROR, realmId=master, clientId=null, userId=null, ipAddress=10.122.0.26, error=expired_code, restart_after_timeout=true, authSessionParentId=453870cd-5580-495d-8f03-f73498cd3ace, authSessionTabId=1d17vpIoysE

我想发布的另一个附加信息是,我在启动时在所有 keycloak pod 日志中看到以下信息。

05:27:10,437 INFO  [org.jgroups.protocols.pbcast.GMS] (ServerService Thread Pool -- 58) my-keycloak-0: no members discovered after 3006 ms: creating cluster as coordinator

这听起来像是 3 个成员没有合并,也没有形成一个 keycloak 集群。

最佳答案

可能导致这种情况的一种常见情况是,发出访问代码的节点不是接收到 token 代码请求的节点。因此,客户端从节点 1 获取访问代码,但第二个请求到达节点 2,并且该值尚未在此节点的缓存中。防止这种情况的最安全方法是设置 session 粘性负载均衡器。

我建议您尝试将service.spec.sessionAffinity设置为ClientIP。它的默认值为None

关于kubernetes - 无法登录高可用keycloak集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72551732/

相关文章:

apache-spark - kubernetes的Spark集群中的CrashLoopBackOff:nohup:无法执行 '--':没有这样的文件或目录

mysql - 部署未获取 secret 密码

spring-boot - 是否可以使用 Keycloak 对新用户触发自定义操作?

kubernetes - 安装ingress-nginx helm chart出错

nginx - Kubernetes NGINX 入口重写目标注释中断

kubernetes - 如何避免将默认密码附加到 ServiceAccount?

java - Docker、Dockerfile 和在我开始下一个服务之前使用等待

spring-boot - 带有 NGINX 代理服务器的 Keycloak 不验证 rest api

charts - 创建后如何重命名 Helm chart ?

Mysql Kubernetes Deployment helm chart 因准备就绪和事件探测失败而失败