3

这似乎与子网/可用区有关,但我是使用 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) 中创建了一个面向 Internet 的 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 的安全组。

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

4

2 回答 2

5

@Chris,感谢您的回复......碰巧,我已经在朋友的帮助下解决了这个问题。我将在这里发布我的发现以供后代使用(以防其他人对 ELB 的工作原理同样感到困惑)。

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

us-east-1c 私有子网 10.1.3.0/24(使用 nat 实例作为默认路由) 公有子网 10.1.4.0/24(使用互联网网关作为默认路由)

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

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

这就是如此令人困惑的地方。而且我还没有完全理解。该实例可以向例如 www.google.com 发出请求。我可以 RDP 到它并打开浏览器并获取网页。但是来自主机的请求(比如我家中的笔记本电脑)会死掉。奇怪的。

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

于 2013-12-01T04:37:26.027 回答
0

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

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

希望这些技巧之一对您有用。

于 2013-11-29T23:45:42.603 回答