aws的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  阅读(112)  评论(0)    收藏  举报