我创建了一个具有公共和私有子网的VPC。对于公共子网,我将Internet网关连接到私有子网nat网关,从这里开始,我的计划是在私有子网中启动我的所有实例,并使用elb将它们连接到外部世界,为此,我在私有子网中启动了tomcat服务器,并将其连接到elb,在公共子网中,我在私有子网中启动了mongodb,并将公共子网elb连接到该子网。现在,当我从tomcat服务器调用API时,它应该从db中获取数据,这是因为当我从elb sg中的任何位置允许27017(mongodb端口)时,这是我面临的问题,我不想让只有Tomcat服务器应该通过elb与mongodb进行通信的每个地方的端口,如何配置elb的安全组以仅允许来自Tomcat服务器的流量。
答案 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 primary和it is a bad practice to use secondaries to increase performance for read requests。
您应该设置mongos接受连接,并让它为您处理路由。在这种情况下,您的tomcast服务器可以直接连接到私有mongos端点,而不会向互联网公开流量。
如果您不使用mongodb集群(在这种情况下,我首先不明白为什么要使用负载平衡器),那么它甚至更简单,只需使用mongodb服务器专用IP进行连接即可。
答案 1 :(得分:0)
您可以创建一个专用于服务器与数据库之间的通信的安全组,并将该安全组附加到这两个服务器上。
我不建议将NAT用于公共应用程序,因为此NAT实例可能无法支持峰值负载。