☁️ SLB(服务器负载均衡) 云厂商托管
负载均衡(Load Balancing)是一个通用概念,指将请求分发到多个后端服务器,避免单点过载。SLB 是云厂商对负载均衡的托管实现(如阿里云 SLB、AWS ELB、腾讯云 CLB)。
它是用户请求进入系统的第一道关卡,通常部署在公网入口。
后端目标
物理机 / 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)。
核心功能
路由 + 鉴权 + 限流 + 熔断 + 日志
- 路由转发:根据路径 / Header 将请求转发到不同微服务
- 身份认证:JWT 校验、OAuth2、API Key 等统一鉴权
- 限流熔断:保护后端服务不被突发流量击垮
- 协议转换:外部 HTTP → 内部 gRPC / Dubbo 等
- 可观测性:统一日志、指标、链路追踪接入点
⚙️ NGINX 反向代理
NGINX 是一个高性能的 Web 服务器和反向代理。在负载均衡体系中,它通常作为 L7 反向代理,通过配置 upstream 模块将请求分发到多个后端实例。
NGINX 也可以作为静态资源服务器和K8s Ingress Controller 的底层实现(Ingress-NGINX Controller)。
工作层级
L7(应用层),也可 L4(stream 模块)
- 反向代理:隐藏后端服务器,统一入口
- 负载均衡:round-robin、ip-hash、least_conn 等策略
- SSL 终止:集中处理 HTTPS 证书
- 静态资源:高效处理图片、CSS、JS 等静态文件
- Ingress 底层:K8s 最常用的 Ingress Controller 就是 Ingress-NGINX
🚪 K8s Ingress 集群 HTTP 路由
Ingress 是 K8s 中定义 HTTP/HTTPS 路由规则的 API 对象。它本身不负责流量转发,而是配合 Ingress Controller(通常是 NGINX)一起工作。
Ingress 相当于在 K8s 集群内写了一份"路由表":哪个域名/路径 → 转发到哪个 Service。Ingress Controller 读取这份规则,实际执行转发。
- 域名路由:api.example.com → api-service
- 路径路由:/api/* → api-service,/web/* → web-service
- SSL 终止:通过 TLS 配置统一管理证书
- 需要 Controller:Ingress 只是规则定义,实际执行靠 Ingress Controller(通常是 NGINX)
- 可替代 API 网关:简单场景下 Ingress 可承担路由职能,复杂场景需配合 API 网关
🔗 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
- 最简单的对外暴露方式
- 服务发现:通过 DNS(如 api-service.default.svc.cluster.local)找到后端 Pod
- 负载均衡:iptables/IPVS 将流量分发到多个 Pod
- 解耦:调用方不需要知道 Pod IP,只需访问 Service 名
- 与 Ingress 的关系:Ingress 定义"从哪来怎么走",Service 定义"最终分发给哪些 Pod"
📦 K8s Deployment 工作负载管理
Deployment 是 K8s 中管理无状态应用的核心控制器。它声明"我需要几个副本的什么应用",然后由 K8s 负责创建和维护对应数量的 Pod。
Deployment 本身不做负载均衡,它的职责是保证指定数量的 Pod 正常运行(滚动更新、回滚、扩缩容)。负载均衡是 Service 的工作。
- 副本保障:声明 replicas: 3,K8s 就会确保始终有 3 个 Pod 运行
- 滚动更新:更新镜像时逐个替换 Pod,服务不中断
- 自动恢复:Pod 挂了自动重建,副本数不足自动补齐
- 配合 Service:Deployment 创建 Pod → Service 发现 Pod → 外部通过 Service 访问
- 不是负载均衡组件:它管的是"有几份",而不是"流量怎么分"