gpt4 book ai didi

amazon-web-services - 如何找出 ECS 运行状况检查失败的原因?

转载 作者:行者123 更新时间:2023-12-03 17:20:24 26 4
gpt4 key购买 nike

大纲:

我有一个非常简单的 ECS 容器,它在端口 5000 上监听并写出 HelloWorld,以及它正在运行的实例的主机名。我想使用 ECS 部署许多这些容器并对其进行负载平衡,以真正了解更多有关其工作原理的信息。它在一定程度上有效,但我的健康检查失败(超时),这导致容器任务上下跳动。

当前配置:

  • 1 个 VPC(10.0.0.0/19)
  • 1个互联网网关
  • 3 个私有(private)子网,一个用于 eu-west-1 中的每个 AZ(10.0.0.0/24、10.0.1.0/24、10.0.2.0/24)
  • 3 个公有子网,eu-west-1 中的每个 AZ 一个(10.0.10.0/24、10.0.11.0/24、10.0.12.0/24)
  • 3 个 NAT 实例,每个公共(public)子网中的一个,将 0.0.0.0/0 路由到 Internet 网关,并且每个实例都分配了一个弹性 IP
  • 3 个 ECS 实例,每个私有(private)子网中也有一个,路由到与 ECS 实例位于同一可用区的相应公有子网中的 NAT 实例
  • 1 个 ALB 负载均衡器(面向 Internet)注册到我的 3 个公共(public)子网
  • 1 个目标组(没有根据 ECS 文档注册的实例),但在/health
  • 的“流量”端口上设置了健康检查
  • 1 服务带来 3 个跨 AZ 的任务并使用动态端口(然后在 docker 容器中映射到 5000)

  • 路由

    每个私有(private)子网都有一条指向 10.0.0.0/19 的规则,以及一条指向与其位于同一 AZ 的公有子网中的 NAT 实例的 0.0.0.0/0 的默认路由。

    每个公有子网都有相同的 10.0.0.0/19 路由和 0.0.0.0/0 到 Internet 网关的默认路由。

    安全组

    我的实例位于一个组中,该组允许从 ALB 所在的安全组导出到任何地方并在端口 32768 - 65535 上入口。

    ALB 位于一个安全组中,该安全组仅允许在端口 80 上进入,但在我的 ECS 实例在任何端口/协议(protocol)上的安全组中进行导出

    发生什么了

    当我提出这一切时,它确实有效 - 我可以获取 ALB 的公共(public) dns 记录并刷新,我看到我的容器应用程序返回给我的响应告诉我主机名。然而,这正是我想要实现的目标,它未通过健康检查,并且容器被排空并替换 - 另一个未通过健康检查的容器。如此循环往复,我从未见过一次成功的健康检查。

    我试过的
  • 调整健康检查间隔,使 ECS 需要大约 5
    在终止任务之前,持续几分钟的健康检查失败。一世
    认为这会消除它在任务时有点敏感
    启动?尽管有我,这仍然会触发拆除
    能够始终查看在我的浏览器中运行的应用程序。
  • 以多种方式确认/health url 端点。我可以通过 ALB 公开检索它(以及在“/”处查看主应用程序根 url),curl 告诉我有正确的 200 OK 响应(健康检查默认设置为查找)。我已经通过 ssh 连接到我的 ECS 实例并在“/”和“/health”上执行了 curl --head {url} 并且都给出了 200 OK 响应。我什至在公共(public)子网中启动了另一个实例,授予它与 ALB 安全组对我的实例相同的访问权限,并能够从那里进行运行状况检查。

  • 概括

    我可以通过负载均衡器、ECS 实例本身以及使用实例私有(private) IP 和来自 ALB 所在公共(public)子网中另一台计算机的端口。ECS 服务在没有超时的情况下无法看到此运行状况检查。我到底能错过什么?

    最佳答案

    对于接下来的任何事情,我设法意外地破坏了容器中的应用程序,并引发了 500 错误。但至关重要的是,健康检查开始报告这个 500 错误 -> 因此它不是网络超时。这意味着当健康检查联系我的应用程序中的端点时,它没有正确处理响应,这似乎是与 Nancy(我正在使用的 api 框架)和 Go 相关的问题,它有时会报告“Client.Timeout等待 header 时超出”,我确信 ECS 将其解释为网络超时。我将 tcpdump 网络流量,查看运行状况检查发送的内容以及 Nancy 的响应,并将其与正常工作的容器进行比较。也许有一个 Nancy 修复,或者 ECS 不需要那么挑剔。

    编辑:

    通过简单地将我的 Nancy 应用程序正在使用的所有 nuget 包更新到最新可用的包,突然一切都开始工作了!

    关于amazon-web-services - 如何找出 ECS 运行状况检查失败的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42770147/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com