如果从同一实例转发,则Amazon Web Services负载均衡器转发到侦听器不起作用

时间:2017-07-26 15:15:30

标签: amazon-web-services amazon-ec2 tcp load-balancing

我在Amazon Web Services中设置了以下情况:AWS setup

来自Internet的请求通过端口443进入负载均衡器,并且侦听器确保此流量转发到端口8080上的实例(到应用程序A)。 负载均衡器上的另一个侦听器将流量从端口8041转发到实例上的端口8050(到应用程序B)。 应用程序A可以在端口8041上对负载均衡器执行REST调用,这最终将在应用程序B处结束。

入站规则在图表上设置 sg-1 安全组:

  • 443 / tcp from 0.0.0.0/0(从互联网连接)
  • 来自sg-2的
  • 8041 / tcp(来自应用程序A的连接)

入站规则在图表上设置了 sg-2 安全组:

  • 22 / tcp from 0.0.0.0/0(SSH)
  • 8050 / tcp from sg-1(连接到应用程序B)
  • 8080 / tcp from sg-1(连接到应用程序A)

不幸的是,应用程序A无法通过端口8041上的负载均衡器到达应用程序B. 但是,一旦我允许来自所有源(而不是特定安全组)的上述端口上的入站连接,突然应用程序可以在端口8041上对应用程序B进行REST调用。

我怀疑它可能与sg-1中的实例有关,并通过负载均衡器再次以sg-1结尾。 报告应用B"健康"通过负载均衡器,连接端口8041上的负载均衡器或转发到实例的端口8050似乎有问题。

我试图通过其内部DNS名称直接调用应用程序B,而不是通过应用程序A中的负载均衡器调用应用程序B.这样可行。

我没有想法。我的配置似乎很好,但仍然要求不通过。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

  

当您指定安全组作为规则的来源时,请执行此操作   允许与源安全组关联的实例进行访问   安全组中的实例。 (...)允许进入的流量   基于关联实例的私有IP地址   与源安全组(而不是公共IP或弹性IP)   地址)。

当您的应用程序A连接到(外部)Load Balancer时,它将连接到LB公共IP,app a公共IP作为源地址,因此sg-1 ID不能用于sg-2规则。我在这里看到两个选项:

  1. 创建另一个Internal Load Balancer,并使用它从应用A访问应用B(LB名称将解析为私有IP,安全组ID可用于规则)
  2. 不使用sg-2规则中的appA安全组ID,而是使用appA公共IP地址(如果您希望appA公共IP地址发生任何更改,这可能不是最佳的)