有图有真相!一文全解Kubernetes 负载均衡+最佳实践

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在 Kubernetes 中,负载均衡(Load Balancing)是多层次的,涵盖 服务内部(Pod 间)节点间外部流量入口 等多个层面。
本文对 Kubernetes 负载均衡进行详解,按照详细分类、实现原理及生产/测试环境中的实践,逐层清晰呈现各组件关系及生产/测试环境实现差异,有图有真相。


Kubernetes 负载均衡架构全景

Kubernetes Cluster
Node X
Node Y
Node Z
External Traffic
DNS
L4
路由规则
L4 LB
L4 LB
L4 LB
Service
CoreDNS
kube-proxy
Pod A3
kube-proxy
Pod A2
kube-proxy
Pod A1
External LB
Internet User
Ingress Controller

一、Kubernetes 负载均衡分类

1. 服务内部负载均衡(Pod 级别)

  • 适用场景:同一 Service 后端的多个 Pod 之间流量分配
  • 实现方式kube-proxy + Service 机制
  • 类型
    • ClusterIP Service(默认)
    • Headless Service(无头服务,直连 Pod)

内部负载均衡

2. 节点间负载均衡(Node 级别)

  • 适用场景:将外部流量分发到不同 Node
  • 实现方式NodePortLoadBalancerIngress
  • 类型
    • NodePort Service
    • LoadBalancer Service(云厂商或 MetalLB)

节点间负载均衡

3. 外部入口负载均衡(L7 路由)

  • 适用场景:基于域名/路径的 HTTP(S) 流量分发
  • 实现方式Ingress Controller(如 Nginx、Traefik)
  • 类型
    • Ingress(需配合 Ingress Controller)

外部入口负载均衡


二、实现原理详解

1. 服务内部负载均衡(kube-proxy)

工作原理
  1. Service 创建:定义 selector 选择一组 Pod,分配 ClusterIP(虚拟 IP)。
  2. kube-proxy 监听:每个 Node 上的 kube-proxy 监听 Service 和 Endpoints 变化。
  3. 规则生成
    • iptables 模式(默认):生成随机规则的 iptables 链,流量被 DNAT 到后端 Pod。
    • IPVS 模式(高性能):基于内核的负载均衡,支持 rr(轮询)、wrr(加权轮询)等算法。
  4. 流量分发:请求到达 ClusterIP 后,由 kube-proxy 按规则转发到 Pod。
生产 vs 测试环境
环境实现方式特点
生产环境IPVS 模式(高性能,支持更多调度算法)适用于高并发场景,减少 iptables 性能损耗
测试环境iptables 模式(默认,简单)适合低流量场景,配置简单

2. 节点间负载均衡(NodePort / LoadBalancer)

工作原理
  1. NodePort Service
    • 在每个 Node 上开放一个固定端口(如 30080)。
    • 外部流量通过任意 NodeIP:Port 访问,由 kube-proxy 转发到后端 Pod。
  2. LoadBalancer Service
    • 云厂商自动创建外部负载均衡器(如 AWS ALB、GCP LB)。
    • 负载均衡器将流量分发到各 Node 的 NodePort,再由 kube-proxy 转发到 Pod。
生产 vs 测试环境
环境实现方式特点
生产环境LoadBalancer(云厂商 LB 或 MetalLB)高可用,自动健康检查,支持 TLS 终止
测试环境NodePort(手动访问 NodeIP:Port)简单,无需云厂商依赖

3. 外部入口负载均衡(Ingress Controller)

工作原理
  1. Ingress 资源定义规则

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: foo.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
                  
    
  2. Ingress Controller 监听并配置

    • Nginx/Traefik 等控制器动态生成负载均衡规则。
    • 将 HTTP/HTTPS 流量按域名或路径路由到不同 Service。
生产 vs 测试环境
环境实现方式特点
生产环境Nginx Ingress + TLS 终止 + 云 LB支持金丝雀发布、限流、WAF 集成
测试环境简易 Ingress(如 kubectl port-forward快速验证路由规则

三、生产环境最佳实践

  1. Pod 级别负载均衡
    • 使用 IPVS 模式kube-proxy
    • 为关键 Service 配置 PodAntiAffinity,避免单节点瓶颈。
  2. 节点间负载均衡
    • 云环境:LoadBalancer Service + 多可用区部署。
    • 本地集群:MetalLB(替代云厂商 LB)。
  3. 入口负载均衡
    • 使用 Nginx Ingress Controller 并启用 HPA(自动扩缩容)。
    • 配置 TLS 终止全局速率限制

AWS EKS 生产环境负载均衡架构
AWS EKS 生产环境负载均衡架构


四、测试环境简化方案

  1. 快速暴露服务
    kubectl port-forward svc/my-service 8080:80  # 临时端口转发
    
  2. 使用 NodePort 替代 LoadBalancer
    apiVersion: v1
    kind: Service
    spec:
      type: NodePort
      ports:
        - port: 80
          nodePort: 30080
    
  3. 轻量级 Ingress
    • 使用 minikube addons enable ingresskind 集群内置 Ingress。

测试环境(Minikube 方案)
测试环境(Minikube 方案)


五、总结

负载均衡类型实现原理生产环境方案测试环境方案
服务内部(Pod 间)kube-proxy + iptables/IPVSIPVS 模式 + Pod 反亲和性iptables 模式
节点间(Node 级别)NodePort/LoadBalancer云厂商 LB + 多可用区NodePort + 手动访问
外部入口(L7)Ingress ControllerNginx Ingress + TLS + HPA简易 Ingress 或 port-forward

关键架构组件联动

关键架构组件联动

通过合理选择负载均衡策略,可以满足从开发测试到高并发生产场景的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值