我在 vpc 公共子网中有 3 个 Web 服务器(ec2 实例),它们都有 EIP。
我有通常的 Internet 网关和路由,以确保这些实例能够调用外部服务,以及在这些实例之间旋转传入流量的负载均衡器 (ELB)。
主要问题是服务器上的应用程序将连接到许多外部服务/API,但其中一些服务需要 IP 白名单。我们现在要做的是将 EIP 分配给实例,进入所述服务的控制面板,添加新的 EIP 并继续使用,但是我们的帐户可用的 EIP 数量都达到了限制(是的,我知道它可以被碰撞,但仍然)以及在这些外部服务中有多少 IP 是可列入白名单的。
鉴于我们希望保持可自动扩展,我想询问有关如何通过单个 EIP 路由所有实例生成的流量而不丢失当前内部工作的想法。除非要使用 DNS,否则通往这些服务的固定特殊路由并不是很灵活,主要是因为我们无法提前知道他们所有的 IP 池。
我已经阅读了有关 NAT 网关的信息,但我不确定架构的负载平衡部分是否会继续运行,Web 服务器是否能够响应请求等。
是的,您可以将 NAT 网关或NAT 实例与 ELB 结合使用……这是将内部发起的外部服务出站流量列入白名单的最明智方式。
NAT 网关始终具有静态公共 IP 地址。
此配置要求实例没有自己的公共 IP 地址,并且不在默认路由指向 Internet 网关的公共子网上。配置后,实例子网的默认路由需要指向 NAT 设备。
反过来,这意味着您的 ELB 不能与实例位于同一子网中,因为 ELB 子网必须将 Internet 网关作为其默认路由。
来自实例的响应流量指向 ELB 的内部 IP 地址,因此不受实例子网默认路由的影响,因此此配置不会中断对 ELB 请求的响应流量。
在某些人看来很奇怪,将 ELB 放置在与其后面的实例不同的子网上是标准配置。与路由器可能成为瓶颈的传统网络不同,没有与 ELB 相关的负面性能考虑,并且其平衡实例位于彼此不同的子网上。整个 VPC 网络是一个软件定义的虚拟网络,因此位于不同的子网并不意味着流量将通过一个不必要的路由器,就像在物理以太网网络上那样。实例之间的所有流量都遵循通过 VPC 基础设施的类似路径。
另请参阅为什么我们需要在 VPC 中使用私有子网?关于堆栈溢出。
好消息 - 亚马逊为此添加了一种新型负载均衡器(网络负载均衡器)。您可以为其分配一个弹性 IP 地址,瞧——负载均衡器的静态 IP!
它适用于 TCP 协议而不是 HTTP,因此您不能在负载平衡器上执行 SSL(每个 Web 服务器都需要证书),并且它没有“粘性”选项(但它非常粘性)。除此之外,它就像“应用程序”负载平衡器一样工作。