amazon-ecs-agent 总是重启

amazon-ecs-agent is always restarting

我在亚马逊上有一个自动缩放组,它生成服务器实例。

我的 aws-cli 配置是:

[default]
s3 =
    signature_version = s3v4
    addressing_style = path
region = eu-central-1

我的 ecs-agent 配置在实例启动时使用 aws-cli 从 s3 读取,如下所示:

ECS_CLUSTER=cluster-mongodb
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"domain.com":{"auth":"bsaewfgvewgf23g9hv3","email":""}}

遗憾的是,派生实例上的 ecs-agent 总是在 10 秒后重新启动,而不是注册到集群 "cluster-mongodb"。

错误日志在这里:

2016-02-05T14:40:47Z [INFO] Starting Agent: Amazon ECS Agent - v1.7.1 (007985c)
2016-02-05T14:40:47Z [INFO] Loading configuration
2016-02-05T14:40:47Z [INFO] Checkpointing is enabled. Attempting to load state
2016-02-05T14:40:47Z [INFO] Loading state! module="statemanager"
2016-02-05T14:40:47Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20]
2016-02-05T14:40:47Z [INFO] Registering Instance with ECS
2016-02-05T14:41:07Z [ERROR] Could not register module="api client" err="RequestError: send request failed
caused by: Post https://ecs.eu-central-1.amazonaws.com/: net/http: request canceled while waiting for connection"
2016-02-05T14:41:07Z [ERROR] Error registering: RequestError: send request failed
caused by: Post https://ecs.eu-central-1.amazonaws.com/: net/http: request canceled while waiting for connection

有人以前看过这个吗? 这可能与安全 groups/LB 配置混乱有关吗?

提前致谢

[编辑] 找到解决方案:

检查子网是否注册到正确的路由 table(vpc -> 路由 tables)。就我而言,这是错误的。

此外,我的实例需要一个由 Autoscaling 组的启动配置分配的 public IP,但这对我的设置来说是特殊的。

该消息表明您的实例无法对 ecs.eu-central-1.amazonaws.com 端点执行 HTTPS POST。

确保您的安全组 and/or VPC 配置允许出站 HTTPS 到您的 ECS endpoint

您可以通过命令行确认从实例到端点的端点连接:

curl https://ecs.eu-central-1.amazonaws.com

那应该return 一条类似如下的消息:

<MissingAuthenticationTokenException>
  <Message>Missing Authentication Token</Message>
</MissingAuthenticationTokenException>

使用 NAT 实例并让 Internet 流经您 VPC 内的私有 VM。

实际上,ecs 代理需要互联网访问权限才能连接到 ecs 端点,即 https://ecs.eu-central-1.amazonaws.com

ECS 实例有公共 IP 或者它们正在使用 NAT instance/Gateway 进行 public 访问。

有关详细信息,请参阅 link https://forums.aws.amazon.com/message.jspa?messageID=781868