遇到问题--k8s-tomcat-部署的web项目session丢失shiro认证无效随机拦截

情况

最近把一个在服务器tomcat中运行的web项目 迁移到k8s中,发布成功后,遇到奇怪的现象,登录随机成功,查看页面时也会随机被拦截,表现为session失效,shiro的认证信息丢失。 登录或者点击页面,3次有1次成功,2次失败被拦截。

奇怪的是 该项目在 内测和测试的k8s环境中并没有出现这个情况,ingress代理跳转的规则和 项目代码都是一样的。

原因

经过排查,发现唯一的区别 内测和测试环境中,pod的数量为1,正式版的pod数量为2.

这样就能合理解释了 随机登录成功和失败的问题。 因为tomcat启动的web类型的项目 与一般的api不同,它是需要session进行交互的,而不是通过token的方式进行权限验证,当pod数量为1时,浏览器的每一次请求,都是与同一个pod同一个tomcat进行交互,这样是没有问题的。

而pod数量为多个时,因为流量会随机转发或者轮询转发,所以有可能这一次访问是在podA,但点击第二个界面时 访问到了PodB,podA和podB的session状态是不共通的,所以导致了 权限认证的问题。

解决方案

1、将服务的pod数量将为1

2、如果还是期望多个pod进行负载均衡,则需要配置一些参数,例如sessionAffinity: ClientIP。

apiVersion: v1
kind: Service
metadata:
  name: {
  
    {.appName}}
  namespace: {
  
    {.namespace}}
  labels:
    app: {
  
    

你可能感兴趣的:(遇到问题解决方案集锦,k8s,session,随机,tomcat,web)