健康探测将实例标记为不健康,但事实并非如此

Health probe marks instances as unhealthy but the aren't

我为我的节点应用程序使用 VM 规模集。我的应用有一个可以通过 www.mydomain.com/api/healthcheck 访问 public 的操作,并且只打印一些 json。 当我将健康探测器配置为使用 TCP 协议时,一切正常,我的 api returns 也达到了预期的 json (和状态 200)。 但是,当我现在将我的健康探测器切换为使用 HTTP 和路径=/api/healthcheck 时,我的网站不再可访问(ERR_CONNECTION_TIMED_OUT...我猜负载均衡器会删除所有实例,因为健康探测器告诉他每个实例都不健康)

我在我的节点应用程序前面使用 nginx,但我也尝试(用于测试)配置我的 LoadBalancer 以将端口 80 路由到后端端口 8080(我的节点应用程序在每台机器上 运行ning,这样我就可以避免使用 nginx 代理)。但我得到了同样的行为。

我不知道为什么我的自定义健康检查不起作用。希望能帮到你。


编辑: 为了进行测试,我执行了以下操作:

我看不到你服务器的代码,所以很难弄明白。 如果您共享一些代码,那就更容易了。

所以让我们试着分析一下情况:

初步检查

Connection to the instances has timed out

尝试从您的计算机终端执行以下命令

curl –I private-IP-address-of-the-instance:port/health-check-target-page

现在根据结果我们有不同的可能原因...

初始检查结果:非 200 响应

  • 实例上没有配置目标页面。
  • 未设置响应中 Content-Length header 的值。
  • 应用程序未配置为接收来自负载的请求 平衡器或 return 200 响应代码。

初步检查结果:能够直接连接到实例

  • 实例无法在配置的响应内响应 超时时间。
  • 实例负载很大,响应时间超过了您配置的响应超时时间。
  • 如果您使用的是 HTTP 或 HTTPS 连接和运行状况检查 正在 ping 路径字段中指定的目标页面上执行 (例如,HTTP:80/index.html),目标页面可能正在 响应时间比您配置的超时时间长。

其他:实例未从负载均衡器接收流量

问题:实例的安全组阻止了来自负载均衡器的流量。

对实例进行数据包捕获以验证问题。使用以下命令:

tcpdump port health-check-port