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

Kubernetes LoadBalancer始终将请求转发至同一Pod问题求助

RTMP LoadBalancer 流量全部转发到单个Pod的问题排查

你的Service配置存在几个关键缺失,导致流量无法均匀分发:

1. 外部流量策略设置不合理

当前externalTrafficPolicy: Cluster会让kube-proxy对外部流量做SNAT(源地址转换),丢失客户端真实IP的同时,kube-proxy的转发逻辑容易导致流量集中到少数Pod。
解决方案:将externalTrafficPolicy改为Local,LoadBalancer会直接把流量转发到运行Pod的节点,节点将流量转发给本地Pod,既保留源IP,也能让负载均衡器更均匀地分发流量到不同节点上的Pod。修改后的配置片段:

spec:
  type: LoadBalancer 
  externalTrafficPolicy: Local

2. 缺少会话亲和性或负载均衡策略配置

RTMP是长连接协议,默认Service的sessionAffinity: None(无会话亲和),但kube-proxy的默认负载均衡策略(比如iptables模式下的随机调度)在Pod数量较少时易出现流量集中问题。如果需要让同一客户端的连接固定到同一Pod(适配直播场景),可以开启客户端IP亲和性:

spec:
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 3600 # 可根据业务调整超时时间

3. Pod调度集中在同一节点

如果所有RTMP Pod都被调度到同一个节点,LoadBalancer的流量自然都会流向该节点的Pod。需要在Pod的Deployment配置中添加节点反亲和性,确保Pod分散到不同节点:

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app
          operator: In
          values:
          - rtmp-servers
      topologyKey: "kubernetes.io/hostname"

4. 确认kube-proxy模式

如果使用iptables模式,负载均衡是随机调度;如果是IPVS模式,可配置更灵活的负载均衡策略(如轮询、最小连接数)。通过kubectl describe node <node-name> | grep kube-proxy查看当前模式,若为IPVS,可在Service中添加注解指定策略:

metadata:
  annotations:
    service.kubernetes.io/topology-mode: "ipvs"
    service.kubernetes.io/ipvs-scheduler: "rr" # rr=轮询, lc=最小连接数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:52:26