负载均衡全链路架构

从云厂商 SLB 到 K8s Pod,逐层拆解请求是如何被分发和路由的

请求来源
🌐 用户请求(浏览器 / App)
DNS 解析
L1 — 公网接入层
☁️ SLB
负载均衡(云厂商托管)
L4 四层转发 L7 七层转发
转发到后端服务器 / Node
L2 — 应用网关层
🔐 API 网关
Kong / APISIX / Spring Cloud Gateway
⚙️ NGINX
反向代理 / 负载均衡
L7 七层
路由转发
L3 — K8s 集群入口
☸️ Kubernetes 集群
🚪 Ingress
HTTP/HTTPS 路由规则(7层)
根据路由规则分发
L4 — K8s 服务发现层
☸️ Kubernetes 集群(续)
🔗 Service
ClusterIP / NodePort / LoadBalancer
ClusterIP(L4)
通过 iptables / IPVS 转发
L5 — K8s 工作负载层
☸️ Kubernetes 集群(续)
📦 Deployment
声明式管理 Pod 副本
Pod 1
应用实例
Pod 2
应用实例
Pod 3
应用实例

☁️ SLB(服务器负载均衡) 云厂商托管

负载均衡(Load Balancing)是一个通用概念,指将请求分发到多个后端服务器,避免单点过载。SLB 是云厂商对负载均衡的托管实现(如阿里云 SLB、AWS ELB、腾讯云 CLB)。

它是用户请求进入系统的第一道关卡,通常部署在公网入口。
工作层级
L4(传输层)+ L7(应用层)
核心功能
流量分发、健康检查、SSL 卸载
后端目标
物理机 / VM / K8s Node / ECS
类比
商场的"入口引导员"

四层(L4)

  • 基于 IP + 端口转发
  • 性能高,吞吐大
  • 不理解 HTTP 内容
  • 如:阿里云 SLB 四层、AWS NLB

七层(L7)

  • 基于 URL / 域名 / Header 路由
  • 可做内容级别的路由
  • 支持 SSL 终止
  • 如:阿里云 SLB 七层、AWS ALB

🔐 API 网关 微服务基础设施

API 网关是微服务架构的统一入口,是 NGINX 的"加强版"。在 NGINX 做反向代理和路由的基础上,API 网关额外提供了鉴权、限流、熔断、协议转换、日志审计等治理能力。

常见实现:Kong、APISIX、Spring Cloud Gateway、Zuul(很多底层基于 NGINX/OpenResty)。
工作层级
L7(应用层)
核心功能
路由 + 鉴权 + 限流 + 熔断 + 日志
后端目标
微服务实例 / K8s Service
类比
商场的"前台接待 + 安检"

⚙️ NGINX 反向代理

NGINX 是一个高性能的 Web 服务器和反向代理。在负载均衡体系中,它通常作为 L7 反向代理,通过配置 upstream 模块将请求分发到多个后端实例。

NGINX 也可以作为静态资源服务器K8s Ingress Controller 的底层实现(Ingress-NGINX Controller)。
工作层级
L7(应用层),也可 L4(stream 模块)
核心功能
反向代理、负载均衡、静态资源服务
后端目标
上游服务器 / 应用实例
类比
餐厅的"领位员"

🚪 K8s Ingress 集群 HTTP 路由

Ingress 是 K8s 中定义 HTTP/HTTPS 路由规则的 API 对象。它本身不负责流量转发,而是配合 Ingress Controller(通常是 NGINX)一起工作。

Ingress 相当于在 K8s 集群内写了一份"路由表":哪个域名/路径 → 转发到哪个 Service。Ingress Controller 读取这份规则,实际执行转发。
工作层级
L7(HTTP/HTTPS)
核心功能
基于域名和路径的路由分发
后端目标
K8s Service
类比
大楼里的"楼层指引牌"

🔗 K8s Service 服务发现 + 负载均衡

Service 是 K8s 中将一组 Pod 暴露为网络服务的抽象。它为后端多个 Pod 提供一个稳定的 IP 地址和 DNS 名,并通过 kube-proxy(iptables / IPVS)实现流量的负载均衡。

Service 解决的核心问题是:Pod IP 会随重建而变化,需要一个固定的访问入口

ClusterIP(默认)

  • 集群内部访问
  • 分配一个内部虚拟 IP
  • 仅供集群内 Pod 调用
  • Ingress → Service 走的就是这个

NodePort(外部访问)

  • 在每个 Node 上开放端口
  • 外部通过 NodeIP:Port 访问
  • SLB 可将流量转发到 NodePort

LoadBalancer(云集成)

  • 自动创建云厂商 SLB/CLB
  • 自动关联 NodePort
  • 最简单的对外暴露方式

📦 K8s Deployment 工作负载管理

Deployment 是 K8s 中管理无状态应用的核心控制器。它声明"我需要几个副本的什么应用",然后由 K8s 负责创建和维护对应数量的 Pod。

Deployment 本身不做负载均衡,它的职责是保证指定数量的 Pod 正常运行(滚动更新、回滚、扩缩容)。负载均衡是 Service 的工作。
核心功能
声明式管理 Pod 副本数
关键能力
滚动更新、回滚、扩缩容
产出物
一组相同镜像的 Pod
类比
餐厅后厨的"厨师排班表"

📊 核心概念对比

概念 本质 层级 职责 典型场景
负载均衡 通用概念 概念 将请求分摊到多个后端 所有分布式系统的流量分发需求
SLB 云厂商托管服务 L4 L7 公网流量的入口分发 云上应用对外暴露入口
NGINX 反向代理软件 L7 反向代理、静态资源、负载均衡 传统架构的反向代理层
API 网关 微服务治理组件 L7 路由 + 鉴权 + 限流 + 熔断 微服务架构的统一入口
Ingress K8s 路由规则 L7 域名/路径 → Service 路由 K8s 集群的 HTTP 入口
Service K8s 服务发现 L4 稳定 IP + Pod 间负载均衡 Pod 的网络抽象和服务发现
Deployment K8s 工作负载 管理 Pod 副本的生命周期 无状态应用的部署和运维

🔗 关系链路总结

从外到内的完整链路
用户请求SLB(公网接入)→ API 网关NGINX(路由/鉴权)→ Ingress(K8s 路由规则)→ Service(服务发现 + 负载均衡)→ Deployment 管理的 Pod(实际处理请求)
谁替代谁?
NGINXAPI 网关 的底层基础(很多网关基于 NGINX/OpenResty)
Ingress 在 K8s 内替代了部分 NGINX 的路由配置工作
SLB + Ingress 组合可替代传统 NGINX 的全部职责
Service 的 LoadBalancer 类型可自动创建 SLB
谁是负载均衡?
负载均衡 是所有分发流量的统称
SLB = 云厂商实现的负载均衡
NGINX = 软件层面的负载均衡
Ingress = K8s 内的 HTTP 路由分发(通过 NGINX 等实现)
Service = K8s 内的 TCP/UDP 负载均衡(iptables/IPVS)
Deployment ≠ 负载均衡,它只管 Pod 副本数
💡 点击架构图中的节点查看详细说明