关于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 转发网络请求的方案是有问题的,可以考虑直接使用公有子网来访问网络。

相关推荐
佛州小李哥11 小时前
如何在亚马逊云科技上大幅降低无服务器网页应用冷启动时间(上篇)
java·科技·云原生·serverless·开发·aws·亚马逊云科技
HaoHao_01011 小时前
AWS Lambda
服务器·网络·云计算·aws·云服务器
monkey2211 小时前
AWS S3 跨账户访问 Cross Account Access
云计算·aws
佛州小李哥1 天前
如何在亚马逊云科技上消除无服务器网页应用冷启动时间(下篇)
科技·云原生·serverless·云计算·开发·aws·亚马逊云科技
weixin_307779132 天前
AWS云平台上生成式AI通过项目文档内容分析获知项目风险
人工智能·云计算·aws
taibaili20232 天前
使用Amazon ECS导航云计算环境
aws
weixin_307779133 天前
在AWS云平台上实现多架无人机自主飞行控制和管理的系统设计和实现代码
python·云计算·无人机·aws
weixin_307779134 天前
AWS设计和实现低空管理系统
云计算·aws