我创建了一个带有公有和私有子网的 VPC。对于公共子网,我为私有子网 nat 网关附加了 Internet 网关,从这里我的计划是在私有子网中启动我的所有实例并使用 elb 将它们与外部世界连接,为此我在私有子网中启动了我的 tomcat 服务器并附加到 elb位于公共子网中,我在私有子网中启动了 mongodb,公共子网 elb 连接到它。现在,当我从 tomcat 服务器调用 API 时,它应该从 db 获取数据,当我允许 27017(mongodb 端口)在 elb sg 中的任何位置时,就会发生这种情况,这是我面临的问题,我不想允许来自每个只有 tomcat 服务器应该通过 elb 与 mongodb 通信的端口如何配置 elb 的安全组以仅允许来自 tomcat 服务器的流量。
解决方案:
由于您的 tomcat 服务器位于私有子网中,并且它正在尝试访问公共子网中的 mongodb ELB,因此必须通过 NAT 网关(而不是 ELB)路由 tomcast 服务器的出站流量。
因此,您可以允许来自 NAT 网关 IP 的 27017 端口,而不是将安全组设置为允许来自 0.0.0.0/0 的 27017 端口。
您首先需要检查您使用的是旧式 NAT 网关实例还是新式 VPC NAT 网关解决方案,以获取所需的 IP 地址。
建议:
首先,您不想将实例和数据库之间的流量暴露给公共互联网。请改用私有负载均衡器。
其次,您不需要 mongodb 集群的 ELB(我假设您有一个集群)。Mongodb 集群的目的是实现高可用性。写总是去主,并且这是一个不好的做法,利用二级增加读取请求的性能。
您应该设置 mongos 以接受连接并让它为您处理路由。在这种情况下,您的 tomcast 服务器可以直接连接到私有 mongos 端点,而不会将流量暴露给互联网。
如果您没有使用 mongodb 集群(在这种情况下,我不明白您为什么首先使用负载均衡器)那么它甚至更简单,只需使用 mongodb 服务器私有 IP 连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句