首页 文章

为什么我的ECS服务无法使用我的ELB注册EC2实例?

提问于
浏览
14

我有一个EC2启动配置,可以构建ECS优化的AMI . 我有一个自动缩放组,确保我始终至少有两个可用的实例 . 最后,我有一个负载均衡器 .

我正在尝试创建一个ECS服务,在负载均衡器中的实例之间分配我的任务 .

在阅读了ECS负载 balancer 的文档之后,我的理解是我的ASG不应该自动向ELB注册我的EC2实例,因为ECS负责这一点 . 所以,我的ASG没有指定ELB . 同样,我的ELB没有任何已注册的EC2实例 .

当我创建我的ECS服务时,我选择ELB并选择ecsServiceRole . 创建服务后,我从未在ECS实例选项卡中看到任何可用实例 . 该服务也无法启动任何任务,其中包含非常一般的错误...

服务无法放置任务,因为无法找到资源 .

我已经在这里工作了大约两天,似乎无法弄清楚哪些配置设置没有正确配置 . 有没有人对可能导致这种情况不起作用的想法有任何想法?

Update @ 06/25/2015:

我认为这可能与 ECS_CLUSTER 用户数据设置有关 .

在我的EC2自动缩放启动配置中,如果我将用户数据输入完全清空,则创建的实例的 ECS_CLUSTER 值为"default" . 发生这种情况时,我会看到一个名为"default"的自动创建的集群 . 在这个默认集群中,我看到了实例,并且可以像预期的那样向ELB注册任务 . 一旦任务在ELB中注册,我的ELB运行状况检查(HTTP)就会通过,并且一切都在世界上很好 .

但是,如果我将 ECS_CLUSTER 设置更改为自定义设置,我永远不会看到使用该名称创建的集群 . 如果我手动创建具有该名称的集群,则实例永远不会在集群中可见 . 在这种情况下,我无法在ELB中注册任务 .

有任何想法吗?

6 回答

  • 9

    最后,最终我的EC2实例没有被分配公共IP地址 . 似乎ECS需要能够与每个EC2实例直接通信,这将要求每个实例具有公共IP . 我没有为我的容器实例分配公共IP地址,因为我认为我将它们全部放在公共负载均衡器后面,并且每个容器实例都是私有的 .

  • 13

    我有类似的症状,但最终在日志文件中找到答案:

    /var/log/ecs/ecs-agent.2016-04-06-03:

    2016-04-06T03:05:26Z [ERROR] Error registering: AccessDeniedException: User: arn:aws:sts::<removed>:assumed-role/<removed>/<removed is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:<removed:cluster/MyCluster-PROD
        status code: 400, request id: <removed>
    

    在我的情况下,资源存在但无法访问 . 听起来OP指的是不存在或不可见的资源 . 您的群集和实例是否在同一区域?日志应确认详细信息 .

    回应其他帖子:

    您不需要公共IP地址 .

    您需要:ecsServiceRole或分配给EC2实例的等效IAM角色,以便与ECS服务进行通信 . 您还必须指定ECS群集,并且可以在实例启动或启动配置定义期间通过用户数据完成,如下所示:

    #!/bin/bash
    echo ECS_CLUSTER=GenericSericeECSClusterPROD >> /etc/ecs/ecs.config
    

    如果在新启动的实例上未能执行此操作,则可以在实例启动后执行此操作,然后重新启动该服务 .

  • 2

    可能出现的另一个问题是未将具有适当策略的角色分配给启动配置 . 我的角色没有 AmazonEC2ContainerServiceforEC2Role 策略(或其包含的权限)为specified here .

  • 2

    也可能是ECS代理在/ var / lib / ecs / data中创建了一个存储集群名称的文件 .

    如果代理首先使用群集名称“default”启动,则需要删除此文件,然后重新启动代理 .

  • 2

    您绝对不需要每个私有实例的公共IP地址 . 正确(和最安全)的方法是设置NAT网关并将该网关连接到连接到您的私有子网的路由表 .

    这在VPC文档中有详细记录,特别是Scenario 2: VPC with Public and Private Subnets (NAT) .

  • -1

    在我们的案例中有几层问题 . 我会把它们列出来,这样可能会让你知道要追究的问题 .

    我的监狱是在1个主机中有1个ECS . 但ECS会强制您在VPC下拥有2个子网,每个子网都有1个docker host实例 . 我试图在1个可用区域中只有一个docker主机,但无法使其工作 .

    然后另一个问题是,只有一个子网有一个附加互联网面向它的门户 . 因此其中一个无法从公众访问 .

    最终结果是DNS为我的ELB提供了2个IP . 其中一个IP可以工作而另一个没有 . 所以当使用公共DNS访问NLB时,我看到了随机的404 .

相关问题