ELB不会将流量路由到健康实例

时间:2013-11-18 22:58:00

标签: amazon-elb amazon-vpc

这似乎与子网/可用性区域有关,但我是使用VPC的新手,而且它是我的选择。

VPC:10.80.0.0/16
子网:10.80.1.0/24(us-east-1b)
子网:10.80.2.0/24(us-east-1a)

所有实例都是Windows Server 2012。

我在VPC(10.80.0.0/16)内创建了面向ELB的互联网。从AZ us-east-1a添加了一个实例,它位于子网10.80.2.0/24上。该实例正在运行IIS 7.5,其中一个应用程序在端口80上运行,而/health.aspx已设置为用作ELB运行状况检查。

VPC上的内部流量正常流动(不受限制)。我可以从us-east-1b(10.80.1.0/24)中的另一个实例请求此实例的health.aspx。我也可以将文件从一个实例复制到另一个实例。

出站流量不受限制。我可以RDP到实例(当连接到我们的VPN时)并打开浏览器并请求网页并获取它。

ELB说实例是健康的,我可以在IIS日志中看到对health.aspx的请求。 ELB和实例都配置了允许80和443的安全组。

但如果我尝试通过开放的互联网请求{elb-url} /health.aspx,请求就会超时。同样,使用与实例关联的弹性IP,对{elastic-ip} /health.aspx的请求超时。

2 个答案:

答案 0 :(得分:5)

@Chris,感谢您的回复......碰巧,我已经在朋友的帮助下完成了这项工作。我会在这里发表我的发现给后代(如果其他人对ELB的工作原理感到困惑)。

用图表可以更清楚。但总结是,在每个可用区域中,您需要创建公共子网和私有子网。向ELB添加可用区时,需要为区域选择公有子网。在我进入这个设置之前,这已经在us-east-1b中完成了,而我只是错过了ELB配置的细微差别。所以对于新的可用区,我不得不这样做......

我们东-1C 私有子网10.1.3.0/24(使用nat实例作为默认路由) 公有子网10.1.4.0/24(使用Internet网关作为默认路由)

然后我的实例按预期进入私有子网。 而整件事的关键是(鼓滚......)

当我将us-east-1c添加到我的ELB时,我必须选择 public 子网... 10.1.4.0。否则,实例将通过运行状况检查(因为ELB可以与我的整个VPC中的任何实例进行通信),但来自服务器的响应无法将其返回到公共Internet。

这就是令人困惑的事情。我仍然不完全理解它。该实例可以请求www.google.com。我可以RDP到它并打开浏览器并获取网页。但是主人的请求(比如我家里的笔记本电脑)会死掉。奇怪。

PS:另一个注意事项......确保为您的负载使用足够的NAT实例。我想我们遇到了一个问题,我们的NAT实例只是用完了端口,因为太多的Web服务器试图通过它将出站连接路由到第三方API。老实说,我对这种级别的网络/操作系统故障排除不够好。但我的理论是,我们的8个IIS实例持有过多的NAT实例连接。我们也在那个微实例上滥用了NIC。我把我们提升到两个大型实例,每个AZ一个,事情平滑了。两个NAT实例都在嗡嗡作响,我们再也看不到IIS中挂起的进程了。

答案 1 :(得分:0)

调试此类问题始终是一项挑战。根据您所写的内容(通常适用于尝试解决此问题),我有一些想法可以建议,这些想法来自处理此问题多次。

  • 您是否检查了安全组和网络ACL?请记住,所有网络ACL都需要在两个方向上指定,因为它们是无状态的。还要记住ELB在这方面有点独特。虽然它们与您的VPC相关联,但它们有时需要额外的规则来确保连接。在过去,我通过在所有端口上打开所有网络ACL来调试它,然后删除这些规则,直到它停止工作以识别块的位置。
  • 也应检查安全组。它们是有状态的,但要确保您的负载均衡器具有从Web上获取的权限。
  • 您是否检查过这不是应用程序配置问题?我不知道IIS是如何开箱即用的,但我会检查它是否设置为响应所有主机名。
  • 检查ELB不是内部的,因为它不会公开寻址。
  • 您说ELB配置了运行状况检查,但值得检查您是否也有端口80的侦听器设置?它位于仪表板上的单独选项卡中,除了通过ELB进行连接的运行状况检查之外,您还需要此选项。

希望其中一个提示对您有用。