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

Kubernetes Service未在Pod间均匀分配流量问题咨询

Kubernetes v1.20裸金属集群HPA扩缩容后流量不均排查方案

一、Service 核心配置排查

  • 确认kube-proxy运行模式
    执行命令查看模式配置:kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode
    • 若为ipvs模式:检查调度算法是否为源地址哈希(sh),该算法会将同来源IP的请求全部转发到同一个Pod,若流量来源IP集中就会出现单Pod承载绝大多数负载的情况,需要修改为轮询(rr)算法。
    • 若为iptables模式:默认是随机负载均衡,规则异常才会出现分配不均,后续检查kube-proxy规则更新状态。
  • 检查会话保持配置
    执行命令查看Service配置:kubectl describe svc <你的服务名称> | grep SessionAffinity
    若返回值为ClientIP,说明开启了客户端IP会话保持,同IP的所有请求都会绑定到同一个Pod,将该配置改为None即可解除绑定。

二、Ingress 层配置排查(若通过Ingress接收外部流量)

  • 检查负载均衡策略
    常用的Nginx Ingress默认会复用长连接,单TCP连接内的所有请求都会转发到同一个后端Pod,若客户端使用连接池、单连接请求量极高,HPA扩容出的新Pod会因为没有新连接分配出现空载。可以添加以下Ingress注解调整:
    nginx.ingress.kubernetes.io/load-balance: round_robin
    nginx.ingress.kubernetes.io/keep-alive-requests: 100
    
    上述配置会强制使用轮询策略,同时限制单个长连接最多处理100个请求,用完后断开重新分配后端Pod。
  • 检查会话保持注解
    若Ingress配置了nginx.ingress.kubernetes.io/affinity: cookie这类会话保持注解,会将同用户会话的请求绑定到固定Pod,直接删除对应注解即可。

三、HPA与Pod就绪检测排查

  • 检查HPA触发逻辑
    若HPA仅通过CPU利用率触发扩容,当首个Pod的CPU达到阈值才触发扩容,但此时已有流量全部通过长连接走首个Pod,新扩容的Pod就绪后没有新连接进入就会一直空载。建议结合请求QPS指标做HPA触发条件,提前扩容避免流量绑定。
  • 检查Pod就绪状态
    执行命令确认所有扩容出的Pod都已经加入Service后端端点:kubectl get endpoints <你的服务名称>
    若新Pod的IP没有出现在端点列表中,说明Pod的就绪探测失败,没有被纳入流量转发列表,需要调整readinessProbe配置的检测逻辑和周期,确保Pod能正常处理流量后再被加入后端。

四、kube-proxy规则更新排查

  • 重启kube-proxy验证
    部分场景下kube-proxy进程卡住不会及时更新转发规则,导致新扩容的Pod没有被加入转发列表,执行命令滚动重启kube-proxy:kubectl rollout restart daemonset kube-proxy -n kube-system,重启后观察流量分布是否恢复正常。
  • 手动验证转发规则
    若使用iptables模式,执行命令检查是否存在新Pod的转发规则:iptables-save | grep <新Pod的IP地址>,无匹配规则的话查看kube-proxy日志排查规则更新失败的具体报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:24:04