我有以下设置:
有一个面向互联网的网络负载均衡器位于打开端口 3128 的代理服务器前面,具体来说,它是在负载后面运行的以下存储库 [https://github.com/zytedata/zyte-smartproxy-headless-proxy]平衡器作为 ecs 上的容器。
我可以将容器的安全组 (SG1) 设置为仅侦听来自端口 3128 上的负载均衡器 (SG2) 的安全组的流量,该部分似乎工作正常。
现在有点有趣的是,我有另一个安全组附加到容器上的另一组(SG3),它应该通过负载均衡器安全组(SG2)访问代理服务器,因此网络流量将是:
SG3 -> SG2 -> SG1
但是似乎唯一有效的方法是当我完全打开负载均衡器以接受来自端口 3128 上任何位置的流量时。当我尝试限制流量仅从 SG3 到达端口 3128 上的负载均衡器时,这并不会似乎由于某种原因起作用。
网络负载均衡器是否有任何我可能遗漏的特定内容导致此功能无法正常工作?我已经使用应用程序负载平衡器完成了此类设置,但没有遇到此类问题。
我必须使用网络负载均衡器的原因是代理协议似乎不适用于应用程序负载均衡器(可能是由于应用程序负载均衡器在 OSI 模型的第 7 层上运行)
编辑:我注意到一些类似的问题,涉及可能存在类似问题的公共和私有子网。就我而言,SG3 容器位于公共 EC2 实例中,负载均衡器的 SG2 是面向公众的负载均衡器,因此我猜测这不会对基于公共或私有流量路由的网络活动造成任何困难
您已经创建了一个public网络负载均衡器。网络负载均衡器只能通过其公共 IP 地址进行访问,这意味着对 NLB 的任何网络请求都将离开 VPC,然后返回。一旦网络请求离开 VPC,它们就会失去与源安全的关联组,因此引用其他安全组的安全组规则将不起作用。
如果您的 VPC 中只有其他资源需要访问 NLB,那么您应该创建私有 NLB,而不是公共 NLB。然后您将能够完全按照您的描述配置安全组。
但是,如果需要从 Internet 上的计算机以及内部 VPC 资源访问 NLB,则您必须进行以下更改之一:
将 EC2 实例的所有公有 IP 地址添加到 NLB 的安全组中。如果这些实例是由自动缩放组动态创建的,那么这是不可能的。
将您的 EC2 实例移动到具有 NAT 网关路由的私有子网,并将 NAT 网关的 IP 地址添加到 NLB 的安全组。
创建第二个私有 NLB,其目标与公共 NLB 相同,并让您的 VPC 中的资源访问该 NLB 而不是公共 NLB。