当前位置: 首页 > article >正文

关于AWS网络架构的思考

目录:
AWS概述
EMR Serverless
AWS VPC及其网络
关于AWS网络架构的思考

在AWS K8S中部署的业务,有不同的流量路径。

流量进入

客户端请求

普通的客户端流量流向从前到后是:

  1. 客户端
  2. 公司网关(endpoint)
  3. 业务的Endpoint Service
  4. Load Balancers(监听80和443)
  5. TargetGroupA(将LB的80端口请求转发到端口A),targetGroupB(将LB的443端口请求转发到端口B)。TargetGroup的实例是需要通过 Auto Scaling Group 来注册的。
  6. Ingress Nginx,该服务是Load Balancer类型,内部 endpoints 80,443,A 和 B 四个端口,外部 endpoints 是 80 和 443。
  7. Ingress 通过路由规则将流量转发给业务service,再经过4层的负载均衡将流量发给pod。

通过以上步骤客户端流量到达了服务端。其中1~6部都是公司通用平台负责完成,业务只需要定义好ingress路由规则即可。

网络请求

对于其他第三方从网络上进入的流量,需要通过 API Gateway 来转发到内部网络。其流量从前到后的路径是:

  1. API GW
  2. VPC Link (内含NLB)
  3. NLB(Network Load Balancer) 监听 80 端口
  4. TargetGroup(将LB的80端口请求转发到端口C),TargetGroup实例由Auto Scaling Group 注册。
  5. 业务Service改为NodePort类型,监听所有target group实例上C端口的请求。

通过以上步骤,网络流量就可以达到服务端。这部分全部都由业务方自己管理,其中第4步中 ASG 和 客户端请求的第5步的 ASG 是相同的,业务方只需要将其关联上就行:resource "aws_lb_target_group_attachment" "tg_http_attachment"

相同VPC内的其他服务

对于相同VPC内的其他服务,通过 Route53 将通过域名发出的请求转发到服务的 Endpoint,然后进入客户端请求的第3步。

流量到互联网

对于出去的流量,在 AWS 中有两种方式,一种是通过 NAT 出,一种是通过 Internet Gateway 直接出。

普通的 VPC 的子网是私有子网,不能直接与 Internet 通信,因此需要通过 NAT 转发到网络上。具体请参考博主另一篇文章 AWS VPC 网络。

由于流量从 NAT 出去的,所以网络的出口 ip 即 NAT 的 ip 地址。

如果 VPC 的子网是公有的,则可以直接与 Internet 通信,无需经过 NAT 转换。网络出口地址是 EC2 实例的 公有 ip 地址。

NAT 局限

正常服务到公网的流量走NAT就够了,但是如果服务需要大量建立与第三方某域名的连接,如代理服务,可能会出现 NAT 并发连接错误。举个例子来说,假设现在代理服务需要建立60万个连接来访问腾讯的某个域名,而该域名只能解析出5个ip地址。默认情况下,公有 NAT 网络只能关联2个弹性IP地址,每个弹性ip地址最多支持与唯一目标(由目标ip,端口和协议组合标识)建立55000个并发连接。因此两个弹性ip与5个目标ip最多同时建立 55000 * 2 * 5 = 550000 个连接。

在这种情况下,NAT 就会出现并发连接错误,即使只有55万个连接,这些连接也不是平均分配到不同目标的,显然也会出现并发连接错误。此时经 NAT 转发网络请求的方案是有问题的,可以考虑直接使用公有子网来访问网络。


http://www.kler.cn/a/508587.html

相关文章:

  • 【数据库】MySQL数据库SQL语句汇总
  • 源码编译安装httpd 2.4,提供系统服务管理脚本并测试
  • 春秋杯-WEB
  • Jupyter notebook中运行dos指令运行方法
  • 利用爬虫获取某学习软件的考试题库(带源码)
  • 达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介
  • 深度学习入门-CNN
  • C语言中char *str[] 和char *str有什么区别
  • 利用EXCEL进行XXE攻击
  • 天天AI-20250116
  • NVIDIA 下 基于Ubuntun20.04下 使用脚本安装 ros2-foxy 和 使用docker安装 ros2-foxy
  • mongdb结构与mysql对比
  • 应用场景——教育培训类三、作文批改助手开发实战(对文章进行批改,生成批改建议报告)
  • 《提示工程的科学化探索与大语言模型交互革新》
  • (三)c#中const、static、readonly的区别
  • 5. 推荐算法的最基础和最直观的认识
  • 从 Android 进行永久删除照片恢复的 5 种方法
  • 在.NET用C#将Word文档转换为HTML格式
  • 【STM32 USB】USB描述符
  • ChatGPT如何创造收益?如何打造一个类似ChatGPT的智能助手?ChatGPT谈自身盈利策略与复制可能性
  • 26个开源Agent开发框架调研总结(一)
  • 代码随想录算法训练营第三十五天-动态规划-01背包(二维)
  • 多种 Docker 镜像拉取解决方案与实践
  • ZooKeeper 核心概念与机制深度解析
  • JAVA-Exploit编写(2)--HttpClient库使用
  • js: 区分后端返回数字是否为null、‘-’ 或正常number类型数字。