无法登录到高可用keycloak集群



我在keycloak中使用bitnami helm chart。并尝试使用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

修改后的值的参数。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,但与此同时,问题仍然相同。

除此之外,我还尝试了一些其他版本的舵图,但是UI本身不能正确加载页面未发现错误。

更新当我使用带有入口的无头服务时,我在日志中得到上述错误,即CODE_TO_TOKEN_ERROR。但是如果我使用带有入口的ClusterIP类型的服务,错误如下:

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日志中看到以下INFO。

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集群。

可能导致这种情况的一个常见场景是,发出访问代码的节点并不是接收到令牌请求的代码的节点。因此,客户端从节点1获得访问代码,但第二次请求到达节点2,该值尚未在该节点的缓存中。防止这种情况发生的最安全的方法是设置会话保持负载均衡器。

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

这部分错误

expired_code

可能表示服务器和客户端在计时方面不匹配

相关内容

  • 没有找到相关文章

最新更新