目标组运行状况检查失败导致AWS ECS服务重新启动

时间:2020-07-02 10:50:05

标签: amazon-web-services amazon-ecs aws-fargate aws-application-load-balancer

我有一个.net核心API,该API在Docker容器中运行。 该容器已部署到Amazon ECR,在其中使用Task定义运行它(已经运行)

  • 我的任务定义中的片段
 "portMappings": [
    {
      "hostPort": 50598,
      "protocol": "tcp",
      "containerPort": 50598
    }
  ],

当我启动服务时,任务运行并且运行正常。我获得了公用IP,可以在其中检查我的电话是否可用: enter image description here

  • HTTP 401正常,因为该调用检查有效令牌

enter image description here

enter image description here

问题是当我尝试向目标组添加负载均衡器时。

为此,我删除了旧服务,并使用负载均衡器和目标组创建了一个新服务。 enter image description here

像这样启动我的服务后,目标组运行状况检查响应将带有“请求超时”,并继续重新启动我的服务。 当我检查API的公共IP时,它仍然有效,仅当我尝试访问我的API时 通过负载平衡器不起作用。

目标群体: enter image description here

Lb: enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

由于连接到任务的安全组不允许负载均衡器节点进行入站访问,因此您可能会导致请求超时。

即使所有节点都无法进行健康检查,默认情况下,负载均衡器也会尝试转发到所有节点,这将导致入站评估失败而导致超时。

只要主机允许端口50598到负载均衡器,就不会发生超时,如果您使用的是ALB,则可以将源添加为连接到负载均衡器的安全组。

一旦此访问有效,您将需要确保对HTTP状态代码和路径的健康检查成功。

对于应用程序负载平衡器,您可以使用200-499的范围,但对于网络负载平衡器,它只能进行200-{ {1}}。

您的目标组也必须配置为在端口399上运行,它当前是目标端口50598

更新

该应用程序似乎正在端口80上运行。目标组和任务的配置已更新为使用端口。然后,它又开始工作了。

答案 1 :(得分:1)

只需在运行状况检查成功代码中添加401,它就可以正常工作。您可以在目标组的运行状况检查中定义多个HTTP状态代码。

enter image description here

还要处理“请求超时” ,请允许LB的ECS实例端口50598