EC2 – 如何通过单个公共IP路由出站stream量

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

我有通常的互联网网关的路线,以确保这些实例将能够呼叫外部服务,负载平衡器(ELB)旋转这些实例之间的传入stream量。

主要问题是服务器上的应用程序将连接到很多外部服务/ API,但其中一些服务需要IP白名单。 我们现在要做的就是给一个实例分配一个EIP,去上述服务的控制面板,添加新的EIP并继续运行,但是我们达到了一个限制,无论是在我们账户可用的EIP数量上(是的,我知道它可能会受到冲击,但仍然),以及在这些外部服务中有多lessIP可以被列入白名单。

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

我已经阅读了关于NAT网关的内容,但是我不确定架构中的Load Balacing部分是否仍然存在,Web服务器是否能够响应请求等。

是的,您可以使用NAT网关 NAT实例与ELB一起使用,这是将您的内部启动的出站stream量与外部服务进行白名单最明智的方法。

一个NAT网关总是有一个静态的公共IP地址。

您必须在创build时指定一个弹性IP地址与NAT网关关联。

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

此configuration要求实例不具有自己的公有IP地址,并且不在具有指向Internet网关的默认路由的公共子网上。 实例子网的默认路由需要指向NAT设备,一旦configuration完成。

反过来说,这意味着你的ELB不能和实例在同一个子网上,因为ELB子网必须有Internet网关作为默认路由。

来自实例的响应stream量指向ELB的内部IP地址,因此它不受实例的子网的默认路由的影响,因此此configuration不会将应答stream量中断到ELB请求。

对于某些人来说很奇怪,将ELB放置在不同子网上的标准configuration与它们背后的实例是不同的。 与路由器可能成为瓶颈的传统networking不同,不存在与ELB相关的负面性能考虑,其平衡实例处于彼此不同的子网上。 整个VPCnetworking是一个软件定义的虚拟networking,因此在不同的子网上并不意味着stream量将通过不必要的路由器,因为这意味着在物理以太网上。 实例之间的所有stream量遵循VPC基础结构的类似path。

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