如何允许连接到不同Elb的两个私有实例之间的网络流动?

时间:2018-09-13 07:22:59

标签: amazon-web-services amazon-vpc aws-security-group

我创建了一个具有公共和私有子网的VPC。对于公共子网,我将Internet网关连接到私有子网nat网关,从这里开始,我的计划是在私有子网中启动我的所有实例,并使用elb将它们连接到外部世界,为此,我在私有子网中启动了tomcat服务器,并将其连接到elb,在公共子网中,我在私有子网中启动了mongodb,并将公共子网elb连接到该子网。现在,当我从tomcat服务器调用API时,它应该从db中获取数据,这是因为当我从elb sg中的任何位置允许27017(mongodb端口)时,这是我面临的问题,我不想让只有Tomcat服务器应该通过elb与mongodb进行通信的每个地方的端口,如何配置elb的安全组以仅允许来自Tomcat服务器的流量。

2 个答案:

答案 0 :(得分:2)

解决方案:

由于您的tomcat服务器位于私有子网中,并且它正尝试到达公共子网中的mongodb ELB,因此tomcast服务器的出站流量必须通过NAT网关进行路由(不是ELB )。

因此,您可以从NAT网关IP允许27017端口,而不是将安全组设置为允许0.0.0.0/0中的27017端口。

您首先需要检查您使用的是旧式NAT网关实例还是新的VPC NAT网关解决方案,以获得所需的IP地址。

建议:

首先,您不想将实例和数据库之间的流量公开到公共Internet。改用专用负载平衡器。

第二,对于mongodb集群,不需要ELB(我假设您有集群)。 Mongodb群集的目的是为了实现高可用性。 Write always go to the primaryit is a bad practice to use secondaries to increase performance for read requests

您应该设置mongos接受连接,并让它为您处理路由。在这种情况下,您的tomcast服务器可以直接连接到私有mongos端点,而不会向互联网公开流量。

如果您不使用mongodb集群(在这种情况下,我首先不明白为什么要使用负载平衡器),那么它甚至更简单,只需使用mongodb服务器专用IP进行连接即可。

答案 1 :(得分:0)

您可以创建一个专用于服务器与数据库之间的通信的安全组,并将该安全组附加到这两个服务器上。

我不建议将NAT用于公共应用程序,因为此NAT实例可能无法支持峰值负载。