10

我正在使用 AWS ECS 来托管我的服务。当我尝试用 Fargate 定义任务时,我遇到了以下问题。

CannotPullContainerError:API 错误(500):获取https://xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/:net/http:在等待连接时取消请求(等待标头时超出 Client.Timeout )

此外,我还授予了在 IAM 用户中访问 ECR 的完全权限。请帮我解决这个问题。

4

2 回答 2

15

看看这里:https ://github.com/aws/amazon-ecs-agent/issues/1128

特别是samuelkarp的评论

您在下面看到的错误通常是由于无法访问 Internet 来提取图像。图像拉取发生在任务使用的网络接口上,因此共享安全组和路由规则。

请检查您的配置以了解以下内容:

如果您在没有公共 IP 的情况下启动任务,请确保子网上的路由表有“0.0.0.0/0”到 NAT 网关或 NAT 实例以确保访问 Internet。如果您的路由表有一个互联网网关,这就像一个防火墙并阻止建立连接。如果您使用公共 IP 启动任务,请确保子网上的路由表具有“0.0.0.0/0”到 Internet 网关,以确保您能够成功使用公共 IP 进行入口流量。验证任务的安全组规则是否允许出站访问。这里的默认值通常是所有流量到 0.0.0.0/0。如果这些网络更改均不适用于您,或者它们不能解决您的问题,请告知我们,以便我们进一步提供帮助。

于 2018-02-05T15:45:25.540 回答
12

我已经在这里回答了这个问题,但是复制粘贴并没有什么坏处。

缺少创建工作 NAT 网关的规范。在GitHub 问题上,亚马逊技术人员不断重复您“只是”需要私有 IP + NAT,但事实并非如此。我自己为此苦苦挣扎,但最终在不为我的 Fargate 服务使用公共 IP 的情况下让它正常工作

要让 Fargate 服务在没有公共 IP 的情况下访问 Internet,您需要设置一个具有 2 个子网的 VPC:

  • 带有允许双向Internet 访问的 Internet 网关的公共子网
  • 带有 NAT 网关的私有子网,仅允许传出Internet 访问

您可以通过 2 种方式创建这样的 VPC:转到Services> VPC> VPC Dashboard,单击Launch VPC Wizard并选择"VPC with Public and Private Subnets";或手动:

注意:以下所有步骤均在Services>VPC

  1. 转到Your VPCsCreate a VPC
  2. SubnetsCreate subnet2 次
    1. private子网
      1. 将其附加到焦点所在的 VPC。无论 CIDR 块,您喜欢的任何可用区
    2. public子网
      1. 将其附加到焦点所在的 VPC。无论 CIDR 块,您喜欢的任何可用区
  3. 转到Internet GatewaysCreate internet gateway
    1. 随意命名
    2. 选择新创建的Internet Gateway,并将其附加到焦点所在的 VPCActionsAttach to VPC
  4. 转到NAT GatewaysCreate NAT Gateway
    1. 重要:选择public子网
    2. Create New EIP或使用现有的,因为你有一个
    3. 等待网关成为Available
  5. Route TablesCreate route table2 次
    1. private路由表
      1. 将其附加到焦点所在的 VPC
      2. 返回列表,选择路由表
      3. Routes底部的标签,Edit routes
      4. Add route, 目的地: 0.0.0.0/0, 以之前创建的 NAT 网关为目标Save routes
      5. 仍然选择了路由表,Actions并且Set Main Route Table(如果还没有)
    2. public路由表
      1. 将其附加到焦点所在的 VPC
      2. 返回列表,选择路由表
      3. Routes底部的标签,Edit routes
      4. Add route, 目的地: 0.0.0.0/0, 以先前创建的 Internet 网关为目标Save routes
      5. Subnet Associations底部的标签,Edit subnet associations
      6. 选择public子网,Save
  6. 把黄瓜放在眼睛上。

您放入public子网的每项服务都将具有双向Internet 访问权限,并且您放入private子网中的每项服务都将仅具有传出privateInternet 访问权限(是的,没有公共 IP的子网中的 Fargate 和 EC2 服务将具有 Internet 访问权限)。

于 2019-12-06T10:48:54.513 回答