如何让使用 Amazon EC2 启动类型运行的 Amazon ECS 任务通过 Amazon ECS 中的 Application Load Balancer 运行状况检查?

上次更新时间:2020 年 11 月 12 日

在 Amazon Elastic Container Service (Amazon ECS) 中对一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行 Application Load Balancer 运行状况检查时,返回了一个运行状况不佳的状态。我想让我的 EC2 实例通过运行状况检查。

简短描述

要通过 Application Load Balancer 运行状况检查,请确认以下内容:

  • Amazon ECS 容器中的应用程序返回了正确的响应代码。
  • 已正确配置附加到负载均衡器和容器实例的安全组。
  • 已正确配置目标组的高级运行状况检查设置。

注意: ECS 任务返回不正常运行状态的原因可能有很多。如以下步骤未能解决问题,请参阅 对服务负载平衡器进行故障排除

提示: 要了解您的 ECS 任务停止的原因,请参阅 检查已停止的任务是否存在错误

解决方法

确认 Amazon ECS 容器中的应用程序返回了正确的响应代码

当负载均衡器向运行状况检查路径发送 HTTP GET 请求时,Amazon ECS 容器中的应用程序应返回默认的 200 OK 响应代码。

注意:如果您使用 Application Load Balancer,可将 Matcher 的设置更新为除 200 以外的其他响应代码。有关更多信息,请参阅目标组的运行状况检查

1.    使用 SSH 连接到您的容器实例

2.    (可选)使用适合您系统的命令安装 curl。

对于 Amazon Linux 及其他基于 RPM 的发行版,请运行以下命令:

sudo yum –y install curl

对于基于 Debian 的系统(例如 Ubuntu),请运行以下命令:

sudo apt-get install curl

3.    要获取容器 ID,请运行以下命令:

docker ps

注意:本地侦听器端口位于命令输出中的 PORTS 下,箭头括号后的序列结尾处。

4.    要获取容器的 IP 地址,请使用 docker inspect 命令:

$ IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' aabbccddeeff)

注意:容器的 IP 地址已保存到 IPADDR。如果使用 BRIDGE(桥接)网络模式,这将返回一个 IP。如果使用 AWSVPCHOST(主机)网络模式,请使用分配给将通过其公开该任务的任务 ENI 或主机的任务 IP。

5.    要获取状态代码,请运行 curl 命令,其中包括 IPADDR 和本地侦听器端口。

参见以下示例,其中容器侦听端口为 8080,运行状况检查路径为 /health

curl -I http://${IPADDR}:8080/health

此命令应返回 200 OK

如果您收到“非 HTTP”错误消息,则说明您的应用程序并未侦听 HTTP 流量。如果您收到的 HTTP 状态代码与您在 Matcher 设置中指定的不同,说明您的应用程序正在侦听,但没有返回目标实例运行状况良好的状态代码。

正确配置附加到负载均衡器和容器实例的安全组

最佳实践是配置两个安全组:一个用于负载均衡器,一个用于容器实例。这样可确保允许负载均衡器和容器实例之间的所有流量。此外,您还需要允许容器实例接受为此任务指定的主机端口上的流量。

1.    确认与负载均衡器关联的安全组允许所有流量传出到与容器实例关联的安全组。

2.    确认与您的容器实例关联的安全组允许来自与您的负载均衡器关联的安全组的所有入口流量通过任务主机端口范围。

重要提示:如果您使用的是动态端口映射,则此服务将通过动态端口(通常为端口 32768-65535)公开,而非通过主机端口公开。因此,请确认您的容器实例安全组在针对作为源的负载均衡器的入口规则中反映了此临时端口范围。

要检查与您的负载均衡器关联的安全组,请参阅 Application Load Balancer 的安全组

配置目标组的高级运行状况检查设置

要正确配置高级运行状况检查设置,请参阅目标组的运行状况检查。配置高级运行状况检查设置时,请特别注意以下步骤:

1.    打开 Amazon EC2 控制台,选择 Target Groups(目标组),然后选择您的目标组。

重要提示:使用一个新的目标组。不要手动向目标组中添加目标,因为 Amazon ECS 会自动向目标组注册和注销容器。

2.    选择运行状况检查视图。

3.    对于 Port(端口),选择 traffic port(流量端口)。

注意:如果选择 Override(覆盖),则请确认指定的端口与任务主机端口匹配。

确认您配置负载均衡器的可用区与容器实例相同

要获取配置负载均衡器的可用区,请执行以下操作:

1.    打开 Amazon EC2 控制台

2.    在导航窗格中的 Load Balancing(负载均衡)部分,选择 Load Balancers(负载均衡器)。

3.    选择您用于 Amazon ECS 服务的负载均衡器。

4.    在 Description(描述)选项卡的 Availability Zones(可用区)字段中,记下列出的可用区。 

要获取为您的容器实例配置的可用区,请执行以下操作:

1.    打开 Amazon EC2 控制台

2.    在导航窗格的 Auto Scaling 部分,选择 Auto Scaling Groups(Auto Scaling 组)。 

3.    选择与您的集群关联的容器实例 Auto Scaling 组。

4.    在 Details(详细信息)选项卡的 Network(网络)部分,确认列出的可用区与为负载均衡器列出的可用区匹配。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?