我有一个应用程序在私有子网的 EC2 实例中运行(以增加额外的安全性),直接从与公共子网关联的面向互联网的 NLB 接收流量。
我还在公共子网中配置了一个 NAT 网关,以便私有 EC2 实例可以从 Internet 下载所需的任何内容。
我刚刚得出下一个结论:
https://aws.amazon.com/vpc/pricing/ https://aws.amazon.com/vpc/pricing/
“无论流量的来源或目的地如何,通过 NAT 网关处理的每 GB 都会收取数据处理费用”
与私有子网(Web/应用程序服务器所在的位置)关联的路由表具有 { - 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 层 应用程序层
创建 NAT 实例而不是 NAT 网关,这样您就无需为该 NAT 处理付费。
Thanks!
因此,事实证明 NLB 中存在一个奇怪的行为(错误?),需要默认路由某物以便交通返回工作。
设想:
- 公共子网中的 NLB
- NLB 目标组指向私有子网中的实例
将流量发送到 NLB 将not给出回应。
Add:
- NAT网关
- 在私有路由表中添加一条路由指向 NAT 网关
这有效。
然而,它实际上并没有使用 NAT 网关!
Instead添加 NAT 网关时,您可以创建到另一个实例的默认路由,例如:
0.0.0.0/0 -> another instance
然后,就可以连接到 NLB 了!
在幕后,VPC 网络检测到从实例发出的流量是对通过 NLB 发出的请求的响应,并且流量将被路由出 NLB。
然而,只有当有一个有效的默认路由在路由表中。该路由未被使用——网络会覆盖它,所以它指向什么并不重要。但是,它必须指向有效的资源。如果它指向未附加任何内容的 ENI,则它不起作用。在我的测试中,如果您将其指向同一个实例,它似乎也不起作用。但是,我指出了另一个例子效果很好.
AWS Support 同意这不是最好的行为,但这是目前必须配置的方式。
底线:确实如此not需要 NAT 网关。它只需要一个有效的默认路由,在路由返回流量时将忽略该路由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)