完整时序逐句精准修正解读(贴合你原文)
- SLB ↔ Gateway 完成三次握手,【连接 A】长连接建立
- 连接长时间没有任何数据包传输
- SLB 内部空闲超时计时器到期
- SLB 单向发送 RST 报文 给 Gateway,单方面销毁这条 TCP 通道【连接 A 失效】
- SLB 视角:这条连接 A 彻底作废
- Gateway 操作系统内核收到 RST 报文
- ❗关键坑:Gateway**连接池(保存上游 SLB 连接的池子)**上层应用无感知,仍然缓存这条 "死亡连接 A"(半开连接)
- 新流量完整过程: ① 外部客户端发起请求 → 抵达 SLB → SLB 转发请求进入 Gateway ② Gateway 正常处理、路由、调用【连接 B】访问业务 Pod ③ 业务 Pod 正常返回结果给 Gateway(连接 B 全程正常,所以 Pod 无日志) ④ ✅ Gateway 准备把响应报文通过【死亡连接 A】发回给 SLB! ⑤ Gateway 取出缓存里这条失效的连接 A,尝试 write () 写响应数据 ⑥ Gateway 内核检测到 SLB 早已发 RST 断开这条通道 ⑦ 系统调用失败,抛出:
Connection reset by peer
一句话戳破最大误区
❌ 误区:Gateway 拿这条连接去发起请求调用业务 Pod ✅ 事实:Gateway 拿到业务 Pod 返回结果后,想用这条失效连接把响应传回 SLB(对外回复客户端) ,一写数据直接报错。 流量已经成功走完 Gateway→业务 Pod ,异常发生在网关向外回包阶段,所以业务 Pod 全程没有任何异常日志。
