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

Kubernetes LoadBalancer类型服务3副本仅2个承接流量问题咨询

问题排查与解决方案

异常成因

  • kube-proxy默认负载均衡策略偏差:kube-proxy默认iptables模式采用随机负载均衡算法,200并发属于较低请求量级,概率上会出现流量分配不均,极端情况就会出现单个副本完全分配不到流量。
  • 会话保持配置导致流量固定:不管是K8s Service侧配置了sessionAffinity: ClientIP,还是上层LoadBalancer(云厂商负载均衡)默认开启了源IP会话保持,都会把同一客户端的请求固定转发到少数后端Pod,客户端数量少的场景下就会出现部分Pod无流量。
  • 未就绪Pod未加入Endpoint:Deployment显示3副本运行不代表3个Pod都处于Ready状态,若第三个Pod的readiness探针检测失败,会被自动从Service的Endpoint列表中移除,自然不会承接任何流量。
  • gRPC客户端连接池配置过小:即使排除了单stream单TCP的问题,如果客户端连接池最大连接数配置为2,客户端最多只会和后端建立2条TCP连接,对应只会有2个Pod接收流量。

修复配置方案

  • 第一步先核对Endpoint列表,执行命令kubectl get endpoints <你的Service名称>,确认列表中是否包含3个Pod的IP。如果只有2个,直接排查第三个Pod的 readiness探针配置、容器运行日志,修复故障让Pod进入Ready状态即可。
  • 关闭所有会话保持配置:
    • K8s Service侧:显式配置sessionAffinity: None,移除原有会话保持相关配置。
    • LoadBalancer侧:在云服务商负载均衡控制台关闭会话保持功能,也可以通过Service的annotation配置禁用对应规则。
  • 调整kube-proxy负载均衡策略:将kube-proxy的运行模式从iptables改为IPVS模式,同时将负载均衡算法修改为轮询(rr)或者最小连接数(lc),相比iptables的随机算法,IPVS的流量分配均匀度大幅提升。
  • 调整gRPC客户端配置:将客户端连接池的最大连接数调整为不小于3,同时开启连接池的动态扩容能力,保证有足够的连接可以分散到所有后端副本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:03