keycloak~登录步骤页login-actions/authenticate出现无限次302跳转的原因与解决

问题出现的前提

  • 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部署应用,直接在应用对应的负载均衡上添加即可