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

如何在多个Ingress Pod间分配负载?解决集群Ingress Pod负载不均问题

多Ingress Pod间的负载分配方案

先排查单Pod独占请求的原因

先确认基础配置是否存在问题:

  • 检查Ingress Controller的Service是否开启会话保持:执行kubectl get service <ingress-controller-service> -o yaml,确认spec.sessionAffinity为None(默认值),如果是ClientIP会导致同一客户端请求固定绑定到单个Pod。
  • 确认Ingress Controller的Deployment副本数为2,且所有Pod处于Running状态:kubectl get pods -n <ingress-namespace>

实现负载均衡的工具与配置方法

1. Kubernetes原生Service(推荐)

Kubernetes的Service本身具备负载均衡能力,只需确保配置正确:

  • 使用ClusterIP或LoadBalancer类型的Service:kube-proxy会自动在后端Pod间做轮询负载分发。
  • 若使用NodePort类型,需确保外部流量能分发到集群所有节点(而非固定某一个节点),比如通过外部负载均衡器把请求转发到所有节点的NodePort端口。

2. 外部负载均衡器

  • 云厂商托管LB:当Ingress Service设为LoadBalancer类型时,AWS、GCP、阿里云等云厂商会自动创建外部负载均衡器,将流量分发到所有运行Ingress Pod的节点,再由kube-proxy转发到Pod。
  • 自建负载均衡器:用HAProxy、Nginx等工具搭建前端LB,配置转发规则指向所有Ingress Controller的节点IP+NodePort,或直接通过Service的ClusterIP转发(更稳定,避免Pod IP变动问题)。

3. Ingress Controller自身配置优化

以Nginx Ingress Controller为例:

  • 检查Ingress资源的注解,确保没有开启会话绑定:若存在nginx.ingress.kubernetes.io/affinity: "cookie"注解,会强制会话绑定到单个Pod,需删除或改为nginx.ingress.kubernetes.io/affinity: "none"。
  • 确认Nginx配置中上游Pod的负载均衡策略为轮询(默认配置),无需额外修改即可实现请求分发。

4. kube-proxy IPVS模式优化

将kube-proxy切换为IPVS模式,相比默认的iptables模式,支持更丰富的负载均衡策略(轮询、最小连接、加权轮询等),且性能更优:

  • 确保集群节点安装了ipvsadm、ipset工具。
  • 修改kube-proxy的配置,设置mode: ipvs,并可指定scheduler(如rr轮询、lc最小连接)。

内容的提问来源于stack exchange,提问作者Антон Жуков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:54:22