为何Kubernetes Ingress会修改浏览器中的JWT Token?
问题根源
你遇到的问题核心是Ingress Nginx的会话亲和Cookie与你的JWT Cookie重名。当配置nginx.ingress.kubernetes.io/session-cookie-name: PostIt时,Ingress会自动维护这个名称的Cookie用于会话亲和逻辑,直接覆盖了后端生成的JWT Cookie值,导致后端收到的是Ingress生成的亲和标识而非原始JWT。
解决方案
方案1:修改会话亲和Cookie名称(推荐)
将Ingress的会话亲和Cookie名改为与JWT Cookie不同的名称,避免冲突。修改Ingress注解中的session-cookie-name:
nginx.ingress.kubernetes.io/session-cookie-name: PostIt-Affinity
保留其他会话亲和配置(如果需要会话亲和功能),这样Ingress会生成独立的亲和Cookie,你的JWT CookiePostIt会完整传递到后端服务。
方案2:禁用会话亲和(无需该功能时)
如果后端服务是无状态的,不需要固定请求到同一Pod,直接移除所有会话亲和相关注解:
# 移除以下所有注解 nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/session-cookie-name: PostIt nginx.ingress.kubernetes.io/session-cookie-path: "/" nginx.ingress.kubernetes.io/session-cookie-expires: "900" nginx.ingress.kubernetes.io/session-cookie-max-age: "900" nginx.ingress.kubernetes.io/session-cookie-samesite: None nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none: "true" nginx.ingress.kubernetes.io/session-cookie-secure: "true" nginx.ingress.kubernetes.io/affinity-mode: persistent
修改后Ingress不会修改任何Cookie,JWT会原样传递到后端。
验证
更新Ingress配置后重新应用:
kubectl apply -f your-ingress-config.yaml
再次测试请求,后端服务即可收到原始的JWT Cookie值。
内容的提问来源于stack exchange,提问作者Absorption
相关产品推荐
相关产品推荐

