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
相关产品推荐
相关产品推荐

