如何配置GCP TCP负载均衡实现两个TCP连接路由到同一后端主机
问题根因
你遇到的调度不一致、连接断开问题本质是两个原因导致的:
- GCP 外部TCP负载均衡默认的会话亲和性规则是基于**5元组(源IP、源端口、目的IP、目的端口、传输层协议)**匹配,你连接端口A和端口B的目的端口不同,默认规则下会被判定为两个独立会话,自然会调度到不同的后端实例
- 若会话超过负载均衡默认的超时时间无流量、或者MIG实例被自动扩缩容回收、健康检查失败被摘除,已建立的连接就会被主动终止
解决方案
方案1:修改后端服务会话亲和性规则(最适配业务场景的方案)
在你绑定TCP LB的backend service配置中,将会话亲和性从默认的
NONE修改为CLIENT_IP:
该模式下调度逻辑只匹配源IP、目的IP、传输层协议三个维度,忽略源端口、目的端口,只要是同一个客户端IP发起的请求,无论访问端口A还是端口B,都会被调度到同一个MIG实例上。
配套调整项:- 按需调整会话亲和性超时时间,默认值为30秒,最长支持配置为24小时,覆盖你的业务会话最长存续周期即可
- 若你的测试客户端共享NAT出口IP,该方案可能会导致后端调度不均衡,可结合实际业务场景评估适配性
方案2:统一多端口的后端服务配置
确保端口A、端口B的流量都通过同一个backend service转发,不要为两个端口分别创建独立的转发规则、后端服务:
你可以在backend service的端口映射配置中同时添加A、B两个端口的映射规则,再在TCP LB的转发规则中放开两个端口的访问权限,确保两个端口的流量都执行同一套调度逻辑。方案3:测试场景临时适配
如果是临时测试场景不需要线上配置调整,可以选择两种临时方案:
- 测试期间关闭MIG自动扩缩容,避免实例被自动回收导致连接中断
- 测试时直接绑定MIG单个实例的公网IP,绕开LB调度逻辑,完成单实例功能验证后再验证LB接入场景
连接断开问题额外排查项
- 检查backend service的TCP会话超时配置,默认值为600秒(10分钟),如果你的长连接超过该时长没有报文传输,会被LB主动断开,可按需调整
timeoutSec参数 - 检查MIG的健康检查配置,若健康检查失败实例会被从backend service中摘除,已有连接会被强制切断,确保两个端口对应的健康检查逻辑配置正确
内容的提问来源于stack exchange,提问作者toootooo
相关产品推荐
相关产品推荐

