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

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

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

答案1

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

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

从技术上来说你也许可以,但这不是一个好主意:

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

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

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

答案2

我知道这是一个老话题 - 对于现在有类似用例的人来说,AWSnat-网关将会是一个更好的解决方案。

答案3

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

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

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

相关内容