提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
在 Kubernetes 中,负载均衡(Load Balancing)是多层次的,涵盖 服务内部(Pod 间)、节点间 和 外部流量入口 等多个层面。
本文对 Kubernetes 负载均衡进行详解,按照详细分类、实现原理及生产/测试环境中的实践,逐层清晰呈现各组件关系及生产/测试环境实现差异,有图有真相。
Kubernetes 负载均衡架构全景
一、Kubernetes 负载均衡分类
1. 服务内部负载均衡(Pod 级别)
- 适用场景:同一 Service 后端的多个 Pod 之间流量分配
- 实现方式:
kube-proxy+Service机制 - 类型:
- ClusterIP Service(默认)
- Headless Service(无头服务,直连 Pod)

2. 节点间负载均衡(Node 级别)
- 适用场景:将外部流量分发到不同 Node
- 实现方式:
NodePort、LoadBalancer或Ingress - 类型:
- NodePort Service
- LoadBalancer Service(云厂商或 MetalLB)

3. 外部入口负载均衡(L7 路由)
- 适用场景:基于域名/路径的 HTTP(S) 流量分发
- 实现方式:
Ingress Controller(如 Nginx、Traefik) - 类型:
- Ingress(需配合 Ingress Controller)

二、实现原理详解
1. 服务内部负载均衡(kube-proxy)
工作原理
- Service 创建:定义
selector选择一组 Pod,分配ClusterIP(虚拟 IP)。 - kube-proxy 监听:每个 Node 上的
kube-proxy监听 Service 和 Endpoints 变化。 - 规则生成:
- iptables 模式(默认):生成随机规则的 iptables 链,流量被 DNAT 到后端 Pod。
- IPVS 模式(高性能):基于内核的负载均衡,支持
rr(轮询)、wrr(加权轮询)等算法。
- 流量分发:请求到达
ClusterIP后,由kube-proxy按规则转发到 Pod。
生产 vs 测试环境
| 环境 | 实现方式 | 特点 |
|---|---|---|
| 生产环境 | IPVS 模式(高性能,支持更多调度算法) | 适用于高并发场景,减少 iptables 性能损耗 |
| 测试环境 | iptables 模式(默认,简单) | 适合低流量场景,配置简单 |
2. 节点间负载均衡(NodePort / LoadBalancer)
工作原理
- NodePort Service:
- 在每个 Node 上开放一个固定端口(如
30080)。 - 外部流量通过任意 NodeIP:Port 访问,由
kube-proxy转发到后端 Pod。
- 在每个 Node 上开放一个固定端口(如
- LoadBalancer Service
- 云厂商自动创建外部负载均衡器(如 AWS ALB、GCP LB)。
- 负载均衡器将流量分发到各 Node 的
NodePort,再由kube-proxy转发到 Pod。
生产 vs 测试环境
| 环境 | 实现方式 | 特点 |
|---|---|---|
| 生产环境 | LoadBalancer(云厂商 LB 或 MetalLB) | 高可用,自动健康检查,支持 TLS 终止 |
| 测试环境 | NodePort(手动访问 NodeIP:Port) | 简单,无需云厂商依赖 |
3. 外部入口负载均衡(Ingress Controller)
工作原理
-
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 -
Ingress Controller 监听并配置:
- Nginx/Traefik 等控制器动态生成负载均衡规则。
- 将 HTTP/HTTPS 流量按域名或路径路由到不同 Service。
生产 vs 测试环境
| 环境 | 实现方式 | 特点 |
|---|---|---|
| 生产环境 | Nginx Ingress + TLS 终止 + 云 LB | 支持金丝雀发布、限流、WAF 集成 |
| 测试环境 | 简易 Ingress(如 kubectl port-forward) | 快速验证路由规则 |
三、生产环境最佳实践
- Pod 级别负载均衡:
- 使用 IPVS 模式 的
kube-proxy。 - 为关键 Service 配置
PodAntiAffinity,避免单节点瓶颈。
- 使用 IPVS 模式 的
- 节点间负载均衡:
- 云环境:LoadBalancer Service + 多可用区部署。
- 本地集群:MetalLB(替代云厂商 LB)。
- 入口负载均衡:
- 使用 Nginx Ingress Controller 并启用 HPA(自动扩缩容)。
- 配置 TLS 终止 和 全局速率限制。
AWS EKS 生产环境负载均衡架构:

四、测试环境简化方案
- 快速暴露服务:
kubectl port-forward svc/my-service 8080:80 # 临时端口转发 - 使用 NodePort 替代 LoadBalancer:
apiVersion: v1 kind: Service spec: type: NodePort ports: - port: 80 nodePort: 30080 - 轻量级 Ingress:
- 使用
minikube addons enable ingress或kind集群内置 Ingress。
- 使用
测试环境(Minikube 方案):

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

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

被折叠的 条评论
为什么被折叠?



