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

如何调整K8S Service负载均衡算法/亲和性以解决流量不均问题

解决K8S LoadBalancer UDP流量分配不均的方案

针对你遇到的UDP LoadBalancer流量99%集中在单个Pod的问题,核心原因是默认会话亲和性规则与负载均衡算法的设置导致的,可通过以下调整解决:

1. 修改Service的会话亲和性配置

Kubernetes对UDP类型的Service默认启用ClientIP会话亲和性,这会让同一客户端的所有UDP流量固定转发到同一个后端Pod。如果你的客户端数量较少(比如仅1个或几个),就会出现流量高度集中的情况。

调整方式有两种:

  • 完全关闭会话亲和性:将sessionAffinity设为None,让kube-proxy采用轮询(Round Robin)策略分配流量;
  • 保留轻度亲和性但缩短超时:若业务需要一定的会话绑定,可缩短客户端IP的超时时间,让流量在超时后重新分配。

修改后的Service YAML示例:

apiVersion: v1
kind: Service
metadata:
  name: my-lb
spec:
  type: LoadBalancer
  sessionAffinity: None  # 关闭客户端IP亲和性,启用轮询分配
  # 若需保留亲和性,可替换为以下配置:
  # sessionAffinity: ClientIP
  # sessionAffinityConfig:
  #   clientIP:
  #     timeoutSeconds: 30  # 30秒超时后重新分配客户端流量
  ports:
  - name: my-udp-port
    port: 54545
    protocol: UDP
  selector:
    app: my-app

2. 配置云厂商负载均衡器的算法

如果你的K8S集群部署在公有云(AWS/GCP/Azure等),LoadBalancer类型的Service会对应云厂商的负载均衡器,部分厂商默认采用源IP哈希算法,同样会导致流量集中。需要手动调整为轮询或最少连接算法:

  • AWS EKS:添加注解修改NLB目标组算法
    metadata:
      name: my-lb
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "load_balancing.algorithm.type=round_robin"
    
  • GCP GKE:添加注解设置GCLB负载均衡策略
    metadata:
      name: my-lb
      annotations:
        cloud.google.com/load-balancer-type: "External"
        networking.gke.io/load-balancer-affinity: "none"
    
  • Azure AKS:通过Azure CLI修改LB规则的负载分布
    az network lb rule update --resource-group <你的资源组> --lb-name <LB名称> --name <规则名称> --load-distribution Default
    

3. 验证调整效果

  • 查看Service配置:执行kubectl describe service my-lb,检查Session Affinity字段是否符合预期配置;
  • 云厂商控制台验证:登录对应云平台的负载均衡器页面,确认算法已修改为目标策略;
  • 流量测试:通过多客户端发送UDP请求,观察后端Pod的流量接收情况,确认流量是否均匀分配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:43:33