来自 AWS 自动扩展组的传出流量的静态 IP 地址

dav*_*r48 33 amazon-web-services amazon-elastic-ip autoscaling amazon-vpc elastic-beanstalk

我将在 VPC 的默认子网中的 Elastic Beanstalk 自动扩展组中拥有多个 EC2 实例。这些 EC2 实例上的应用程序需要连接到使用 IP 地址白名单的第三方服务才能允许访问。所以我需要一个或多个静态 IP 地址,我可以将这些地址提供给该服务提供商,以便将它们添加到白名单中。我的理解是,获得静态 IP 的唯一方法是获得弹性 IP 地址。而且我一次只能将弹性 IP 与一个 EC2 实例相关联——我无法将它与我的整个子网或互联网网关相关联(这是正确的吗?)。那么我是否需要为每个 EC2 实例提供一个弹性 IP,以便每个实例都可以单独列入白名单?如果自动缩放添加另一个实例,这将如何工作?我是否应该拥有一个带有弹性 IP 的 EC2 实例,并通过该实例路由所有传出流量?如果是这样,该实例是否需要仅用于此目的,还是可以是运行我的应用程序的实例之一?

the*_*cre 21

你需要一个 NAT。这种配置通常用于支持专用子网的VPC,有相当详细的指南在这里。一旦您的 VPC 配置为使用 NAT 实例,所有出站流量都将归因于 NAT 实例的 EIP。

如果是这样,该实例是否需要仅用于此目的,还是可以是运行我的应用程序的实例之一?

从技术上讲,您可能可以,但这不是一个好主意:

  • 将角色隔离是很好的安全性。
  • 您希望应用程序服务器具有相似或相同的负载配置文件。如果一个实例由于 NAT 而额外增加了 10% 的负载,那么当您达到该实例的限制时,您将不得不过早地扩展。随着越来越多的实例添加到集群中,NAT 变得更加繁忙,这会变得更糟。
  • 您希望您的应用程序服务器是相同的和短暂的,这样您就可以在出现问题或需要扩展时将它们拆除和/或更换。拥有一个与其他应用程序服务器不同的应用程序服务器将是一个令人头疼的问题。

如果您的实例是容器化的,您可能可以摆脱它,但这可能仍然不是一个好主意。

另请记住,您的 NAT 实例可能是单点故障,因此您可能需要考虑冗余。


小智 13

我知道这是一个旧线程 - 对于现在有类似用例的人来说,AWS nat-gateway将是更好的解决方案。


小智 6

我没有足够的声誉来评论上述答案,但我想添加一些您需要知道的信息,如果使用 NAT 网关来实现这一点。创建 NAT 网关时,您需要选择子网和弹性 IP 地址。

起初,我只是将 NAT 网关添加到我的弹性负载均衡器和 EC2 实例所在的同一子网中。然后,您必须将 NAT 网关添加到路由表中。我添加了 NAT 网关作为我尝试联系的外部数据库服务器的 IP 的目标。这导致我的弹性 beantalk 中托管的应用程序超时。这是因为他们试图通过 NAT 连接到该外部数据库。他们到达了 NAT,然后 NAT 尝试通过 Internet 连接到我的服务器,并在它所在子网的路由表中查找它,该子网指向自身,从而创建了一个循环。

解决方案是,在创建 NAT 网关之前,为 NAT 创建一个新子网,以便 NAT 拥有自己的子网和路由表。在 NAT 的路由表中,将所有流量指向 Internet 网关。在主路由表中,将外部 IP 指向 NAT。然后,当您的 EC2 实例尝试连接到您的外部 IP 时,它们将在主路由表(或您为实例所在的子网定义的任何路由表)中查找它们,并找到 NAT。然后,您的 NAT 将在它自己的路由表中查找该 IP,并找到 Internet。