问题出现的前提
- keycloak通过k8s部署,并进行了集群部署,共2个节点
- 通过域名解析后,直接到外网LB,在LB上配置了k8s-ingress的IP,端口是80和443
- 在keycloak应用的ingress配置中,对域名进行了keycloak服务的绑定
问题的描述
- 有时间无法完成登录,点登录后,刷新了一次登录页,未完成登录行为
- 有时在登录时,出现死循环,反复302到
login-actions/authenticate
,keycloak日志中显示“会话失效”,或者可以理解为,“你使用了无效的会话session_code”
问题解决过程
- 如果是单节点不会有这个问题
- 如果是多节点部署,需要在LB上添加会话保持
- 如果是容器化部署的情况下,如果k8s-ingress进行负载,那么,除了在LB上添加了会话保持的,还需要为ingress添加会话保持,代码如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: default
name: my-app
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
- 如果你使用rancher部署应用,直接在应用对应的负载均衡上添加即可

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2017-11-23 jenkins~管道Pipeline的使用,再见jenkinsUI
2016-11-23 大叔最新课程~EF核心技术剖析
2016-11-23 Lind.DDD.LindMQ的一些想法
2015-11-23 Lind.DDD.ConfigConstants统一管理系统配置
2012-11-23 说说程序员应该知道的术语(中文+英文)
2011-11-23 LINQ的Distinct总结