私有EC2和HTTP流量中的AWS应用程序

Lui*_*uis 4 amazon-ec2 amazon-web-services amazon-vpc aws-vpc

我有一个应用程序在私有子网中的EC2实例中运行(以增加额外的安全性),直接从与公有子网关联的面向Internet的NLB接收流量.

我还在公共子网中配置了NAT网关,以便私有EC2实例可以从Internet下载所需的任何内容.

我刚刚得出了下一个结论:

  • 如果我从互联网上请求:http://index.html

  • 私有EC2实例使用NAT网关发回HTTP响应,因此您需要为该NAT处理付费.

https://aws.amazon.com/vpc/pricing/

"数据处理费用适用于通过NAT网关处理的每千兆字节,无论流量的来源或目的地如何"

与私有子网(Web/app服务器所在的位置)关联的路由表具有{ - local; 0.0.0.0/0 - NATGateway}如果删除0.0.0.0/0条目,则对服务器的HTTP请求不起作用.如果我删除NAT网关,我会遇到同样的问题.此外,当我有NAT网关和路由表从私有子网使用它时,当我从Internet做一个简单的HTTP请求时,我也可以在NAT网关的监控选项卡中看到流量 - http:/// index html的

有人遇到过同样的问题吗?我的理解是否正确?

是否有任何解决方法可以避免这种情况?我可以想到以下几点:

  • 将应用程序移动到Web层(在公有子网中),以便EC2实例具有公共IP,因此它不需要NAT网关来响应每个HTTP请求

  • 除了应用程序层之外还创建一个Web层,以便所有流量来自NLB < - > Web Tier < - > App Tier

  • 创建NAT实例而不是NAT网关,这样您就不需要为该NAT处理付费.

谢谢!

Joh*_*ein 7

因此,原来存在NLB,需要一个默认路由到一个奇怪的行为(错误?)的东西来回交通工作.

场景:

  • 公共子网中的NLB
  • NLB目标组指向私有子网中的实例

向NLB发送流量不会给出响应.

加:

  • NAT网关
  • 在专用路由表中添加路由以指向NAT网关

这有效.

但是,它实际上并没有使用NAT网关!

而是加入了NAT网关,可以改为创建默认路由到另一个实例,例如:

0.0.0.0/0 -> another instance

然后,连接到NLB工作!

在幕后,VPC网络检测到来自实例的流量是响应来自NLB的请求,流量将路由到NLB.

但是,只有在路由表中存在有效的默认路由时,它才有效.路由未被使用 - 网络覆盖它,因此它指向的并不重要.但是,它必须指向有效的资源.如果它指向一个没有附加到任何东西的ENI,它就不起作用.在我的测试中,如果你将它指回同一个实例,它似乎也不起作用.但是,我把它指向另一个实例,它工作得很好.

AWS Support同意这不是最好的行为,但它是目前必须配置的方式.

底线:要求NAT网关.它只需要一个有效的默认路由,在路由返回流量时将被忽略.