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


27

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

Answers:


19

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

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

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

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

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

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


使用NAT是否会增加一个额外的接口黑白客户端和服务器,从而增加请求的响应时间?
r.bhardwaj

1
我已经使用NAT网关实现此目的(docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html),但是当我对服务器执行nslookup时,它仍会返回NAT的其他公共IP地址网关
r.bhardwaj

12

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


4

我没有足够的声誉来评论上述答案,但我想添加一些您需要知道是否使用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。


我希望看到一些屏幕截图。我认为这是我的问题,但只能解决大约50%的问题
justin.m.chase

我认为我具有这样的设置,但是当我尝试使用ssh进入实例的公共IP时,它会超时。实例是否需要两个网络设备才能通过NAT,并且还可以接收来自公共IP的传入连接?
justin.m.chase

您必须将第二个网络接口添加到实例并将其添加到外部子网,然后将弹性IP分配给该网络接口。然后,您可以通过该IP连接到该IP,但默认情况下,所有其他流量仍将通过nat。
justin.m.chase
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.