You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s集群中Spring Cloud Gateway无法对后端Pod实现负载均衡的问题排查与解决

刚好碰到过完全一样的问题,我来帮你梳理下原因和解决方案:

问题复盘

你当前的场景是:

  • Spring Cloud Gateway 2021.0.0部署在K8s集群
  • 后端有个对应2个Pod的Service,直接在网关容器内curl这个Service能正常轮询到两个Pod
  • 但网关用http://product-service作为路由URI时,所有请求始终固定到同一个Pod,只有删除该Pod后才会切换到另一个
  • 换成lb://product-service启用Spring Cloud负载均衡时,直接返回503 SERVICE_UNAVAILABLE错误

核心原因

这两个问题本质都是HTTP长连接复用导致的:

  1. 使用http://前缀时,Gateway会与K8s Service的ClusterIP建立长连接,而K8s Service的负载均衡规则是在第一次建立连接时完成Pod选择的,后续所有请求都会复用这个长连接,自然就固定到同一个Pod上。
  2. 使用lb://前缀时的503错误,也是因为长连接导致负载均衡客户端无法正确感知后端Pod的状态变化,结合默认配置的缺失,最终触发服务不可用的报错。

解决方案

直接关闭Spring Cloud Gateway HTTP客户端的长连接复用,强制每次请求重新建立连接,让K8s Service的负载均衡规则每次都能生效。

在你的application.yml配置文件中添加以下内容:

spring:
  cloud:
    gateway:
      httpclient:
        keep-alive: false

验证效果

重启Gateway之后:

  1. 多次请求网关的/api/product/**路径,检查后端两个Pod的日志,会看到请求已经轮流分发到不同Pod
  2. 如果后续需要启用lb://前缀的负载均衡,确保项目中已引入Spring Cloud LoadBalancer依赖(Spring Cloud 2021.0.0版本默认弃用Ribbon,使用LoadBalancer),配合上述关闭长连接的配置,503错误也会同步解决

内容的提问来源于stack exchange,提问作者lILLO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 10:22:30