awsd的lb

 

 

1. AWS 的 LB 是什么?

在 AWS 中,LB 是负载均衡器 的缩写。它的核心作用与所有负载均衡器一样:将传入的网络流量自动分发到多个后端目标(如 EC2 实例、容器、IP 地址等),以提高应用程序的可用性和可扩展性。

AWS 主要提供三种类型的负载均衡器,适用于不同场景:

特性ALBNLBGLBCLB
OSI 层 7 4 3 4/7 混合
协议 HTTP/HTTPS/HTTP2 TCP/UDP/TLS IP TCP/SSL/HTTP
性能 非常高 中等
IP 地址 动态 静态(弹性IP) 静态 动态
费用模型 LCU NLCU GLCU 实例小时
K8s 集成 Ingress 控制器 Service LoadBalancer 很少用 不推荐
路由功能 丰富 简单 网关 基本
 
类型中文全称工作层主要特点和用途
ALB 应用负载均衡器 第7层 - 智能路由:根据内容(如 URL 路径 /api 或 主机头 a.example.com)将请求路由到不同的后端服务。
- 最适合:微服务、容器化应用(如 Kubernetes 的 Ingress)、Web 应用程序。
NLB 网络负载均衡器 第4层 - 极致性能:处理数百万级别的请求/秒,且延迟极低。
- 保持源 IP:能够将客户端的源 IP 地址直接透传给后端实例。
- 支持静态 IP:可以为 NLB 分配静态 IP。
- 最适合:需要高性能和低延迟的 TCP/UDP 流量(如游戏、金融应用)。
GLB 网关负载均衡器 第3层 - 安全流量导向:主要用于将流量引导至第三方虚拟安全设备集群(如防火墙、入侵检测系统),进行安全检查和过滤。
- 最适合:安全生态系统的部署和扩展。

简单总结: 当人们说 “AWS 的 LB” 时,他们通常指的是 ALB、NLB 或 GLB 中的一种,具体是哪一种取决于他们的应用场景。

ALB 类型 - AWS Application Load Balancer

  • 控制器:alb (AWS Load Balancer Controller)

  • 创建的 LB:AWS ALB

  • DNS 格式:k8s-<namespace>-<name>-<hash>.<region>.elb.amazonaws.com

  • 示例:k8s-kafka-kafkauii-5802804bc8-146415192.us-west-2.elb.amazonaws.com

Nginx 类型 - Nginx Ingress + AWS NLB

  • 控制器:nginx (Nginx Ingress Controller)

  • 创建的 LB:AWS Network Load Balancer (NLB)

  • DNS 格式:<random-hash>-<random-number>.<region>.elb.amazonaws.com

  • 示例:a0eda96e771ab441bb7990e24c0c66ab-237224771.us-west-2.elb.amazonaws.com

  • 特点:所有 nginx ingress 共享同一个 NLB(通过同一个 ELB 地址)

EKS 版本决定默认类型:

 
EKS 版本默认 LB 类型说明
1.18 之前 CLB 传统负载均衡器
1.18+ NLB 网络负载均衡器
1.23+ 外部模式 NLB 更优化的 NLB

2. NLB 是 Nginx Ingress 吗?

答案是:不,它们不是同一个东西,但它们在 Kubernetes 架构中可以协同工作。

这是一个非常重要的区别。我们来分解一下:

NLB

  • 身份:它是 AWS 提供的一种云服务,一种托管式的网络负载均衡器。

  • 作用:它位于 AWS 云网络边界,负责接收来自互联网或 VPC 内部的流量,并将其转发到某个目标组。

  • 层级:主要工作在 TCP/UDP 层。

Nginx Ingress

  • 身份:它是 Kubernetes 集群内部的一个组件,通常以 Pod 的形式运行在集群里。

  • 作用:它是一个 Ingress Controller,实现了 Kubernetes 的 Ingress 资源规则。它的核心功能是:

    1. HTTP/HTTPS 路由:根据域名、路径等第7层信息,将进入集群的 HTTP(S) 流量路由到不同的后端 Service/Deployment。

    2. API 网关功能:提供 SSL/TLS 终止、重写、认证等高级功能。

  • 层级:主要工作在 HTTP/HTTPS 层。

它们是如何协同工作的?

在一个典型的、将 Kubernetes 服务暴露到公网的 AWS 架构中,NLB 和 Nginx Ingress 会这样配合:

流量路径:
互联网用户 -> AWS NLB -> Kubernetes NodePort/LoadBalancer Service -> Nginx Ingress Controller Pod -> 你的业务应用 Pod

角色分工:

  1. NLB(AWS 云服务):

    • 扮演 “门卫” 或 “流量入口” 的角色。

    • 它有一个静态 IP 或 DNS 名称供外部访问。

    • 它不关心 HTTP 路由规则,只负责将接收到的 TCP 流量(通常是 80/443 端口)可靠地、高性能地转发到 Kubernetes 集群节点上运行的 Nginx Ingress Controller Pod。

  2. Nginx Ingress(Kubernetes 集群内组件):

    • 扮演 “内部交通警察” 的角色。

    • 它接收从 NLB 转发过来的流量。

    • 然后根据你定义的 Ingress 规则(比如 a.example.com 去 A 服务, b.example.com/api 去 B 服务),将 HTTP/HTTPS 请求路由到对应的、具体的业务 Pod。

一个生动的比喻

  • NLB 就像是 公司大楼前台。

    • 他的工作是把所有外来访客(网络流量)高效地引导到公司内部,但他不关心访客具体要去市场部还是技术部。

  • Nginx Ingress 就像是 公司内部的接待经理。

    • 他站在前台后面,一旦访客进入大楼,他就会上前询问:“您好,请问您找哪个部门?(基于主机头或路径的路由)”,然后亲自把访客带到正确的部门(业务 Pod)。

总结

 
特性AWS NLBNginx Ingress
提供商 AWS F5/NGINX (开源社区)
部署位置 AWS 云网络 Kubernetes 集群内部
主要层级 第4层 第7层
核心职责 高可用、高性能的流量分发 基于内容的 HTTP 路由和 API 网关功能
关系 入口点,为 Ingress 提供服务 内部路由器,依赖于 NLB(或其他LB)将流量引入集群

所以,NLB 不是 Nginx Ingress。更准确的说法是:在 AWS 上的 Kubernetes 环境中,我们经常使用 NLB 作为外部流量入口,来将流量负载均衡到 Nginx Ingress Controller,再由 Ingress Controller 进行更精细的内部路由。

 

 

 

posted @ 2025-11-11 11:39  苦逼yw  阅读(16)  评论(0)    收藏  举报