EC2 - 如何通过单个公共 IP 路由出站流量

Joh*_*ith 6 amazon-ec2

我在 vpc 公共子网中有 3 个 Web 服务器(ec2 实例),它们都有 EIP。

我有通常的 Internet 网关和路由,以确保这些实例能够调用外部服务,以及一个负载均衡器 (ELB) 在​​这些实例之间旋转传入流量。

主要问题是服务器上的应用程序将连接到许多外部服务/API,但其中一些服务需要 IP 白名单。我们现在要做的是为一个实例分配一个 EIP,转到所述服务的控制面板,添加新的 EIP 并继续运行,但是我们的帐户可用的 EIP 数量都达到了限制(是的,我知道它可以被撞,但仍然)以及在这些外部服务中有多少 IP 可列入白名单。

鉴于我们希望保持可自动扩展,我想询问有关如何通过单个 EIP 路由所有实例生成的流量而不丢失当前内部工作的想法。除非要使用 DNS,否则通往这些服务的固定的特殊路由并不是很灵活,主要是因为我们无法提前知道它们的所有 IP 池。

我已经阅读了有关 NAT 网关的内容,但我不确定架构的负载平衡部分是否会保持正常运行,Web 服务器是否能够响应请求等。

Mic*_*bot 8

是的,您可以将 NAT 网关NAT 实例与 ELB 结合使用……这是将内部启动的出站流量与外部服务列入白名单的最明智方法。

NAT 网关始终具有静态公共 IP 地址。

在创建 NAT 网关时,您必须 [...] 指定要与它关联的弹性 IP 地址。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html

此配置要求实例没有自己的公共 IP 地址,并且不在默认路由指向 Internet 网关的公共子网上。配置后,实例子网的默认路由需要指向 NAT 设备。

反过来,这意味着您的 ELB 不能与实例位于同一子网上,因为 ELB 子网必须将 Internet 网关作为其默认路由。

来自实例的响应流量被定向到 ELB 的内部 IP 地址,因此它不受实例子网默认路由的影响,因此此配置不会中断对 ELB 请求的回复流量。

尽管在某些人看来很奇怪,但标准配置是将 ELB 放置在与其后面的实例不同的子网上。与路由器可能成为瓶颈的传统网络不同,ELB 及其平衡实例位于彼此不同的子网上,因此没有负面的性能考虑。整个 VPC 网络是一个软件定义的虚拟网络,因此位于不同的子网上并不意味着流量将通过不必要的路由器,就像在物理以太网上一样。实例之间的所有流量都遵循类似的路径通过 VPC 基础设施。

另请参阅为什么我们需要 VPC 中的私有子网?在堆栈溢出上。