Spring Boot 3.0部署AKS集群带Cookie请求返回200空响应求助
问题现象
- 微服务从Spring Boot 2.7.x升级到3.0版本并部署在AKS集群(搭配Istio/Kube Ingress)后,携带任意Cookie调用上下文根下的任意端点(包括未暴露的端点),始终返回200 OK但响应体为空;不携带Cookie时,所有请求均正常。
- 本地调试运行Spring Boot 3.0版本,或AKS集群中回滚到2.7.x版本时,无论是否携带Cookie,请求均正常响应。
正常场景(本地调试)
curl --request GET --url http://localhost:8080/endpoint -H "cookie: key=test" {"out": "value"} curl --request GET --url http://localhost:8080/endpoint {"out": "value"}
异常场景(AKS集群Ingress访问)
curl --request GET --url http://my.ingress.com/context-root/endpoint -H "cookie: key=test" # 返回200状态码,但响应体为空 curl --request GET --url http://my.ingress.com/context-root/endpoint {"out": "value"}
排查与解决方向
1. 检查Spring Boot 3.0的Cookie处理变更
Spring Boot 3.0基于Spring Framework 6.0,涉及Servlet API从javax.servlet切换到jakarta.servlet,Cookie处理逻辑有调整:
- 检查是否因默认
SameSite配置导致兼容问题,可在application.properties中显式调整:server.servlet.session.cookie.same-site=None server.servlet.session.cookie.secure=true - 排查自定义Cookie过滤器/拦截器,确认代码是否适配了
jakarta.servlet的API,避免因API变更导致请求处理中断。
2. 排查Istio/AKS Ingress的流量规则
- 检查Istio的
VirtualService、Gateway配置,确认是否存在针对带Cookie请求的特殊路由或拦截策略,导致响应被清空。 - 查看Ingress注解配置,比如
nginx.ingress.kubernetes.io/configuration-snippet是否有Cookie相关处理代码,是否因Spring Boot 3.0的请求头格式变化导致异常。 - 尝试强制Ingress使用HTTP/1.1(若当前启用HTTP/2),避免协议兼容问题:
annotations: nginx.ingress.kubernetes.io/http2-enable: "false"
3. 日志定位问题
- 开启Spring Boot的DEBUG日志,重点查看
org.springframework.web、jakarta.servlet相关日志,确认带Cookie的请求是否到达后端服务,以及服务端是否生成了响应。 - 查看Istio sidecar日志(
kubectl logs <pod-name> istio-proxy),检查流量转发时是否有响应被过滤或修改的异常记录。 - 查看AKS Ingress Controller日志,确认请求在Ingress层面的处理细节。
4. 绕过Ingress直接测试Pod
在AKS集群内部直接访问Pod端口,验证带Cookie请求是否正常:
kubectl port-forward <pod-name> 8080:8080 curl --request GET --url http://localhost:8080/context-root/endpoint -H "cookie: key=test"
若此请求正常,说明问题出在Ingress/Istio层面;若仍异常,则问题在Spring Boot应用本身。
内容的提问来源于stack exchange,提问作者Giampiero Poggi
相关产品推荐
相关产品推荐

