AWS Fargate - CannotPullContainerError(500)?

mug*_*gzi 8 amazon-ec2 amazon-web-services amazon-ecs aws-fargate

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

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

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

小智 13

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

特别是samuelkarp的评论

您在下面看到的错误通常是由于缺少用于提取图像的互联网访问权限.图像拉取发生在Task使用的网络接口上,因此共享安全组和路由规则.

请检查您的配置以获取以下信息:

如果要启动没有公共IP的任务,请确保子网上的路由表具有"0.0.0.0/0"到NAT网关或NAT实例以确保访问Internet.如果您的路由表具有Internet网关,则其功能类似于防火墙并阻止建立连接.如果要使用公共IP启动任务,请确保子网上的路由表具有"0.0.0.0/0"到Internet网关,以确保您能够成功使用公共IP进行入口流量.验证任务的安全组规则是否允许出站访问.此处的默认值通常为All Traffic to 0.0.0.0/0.如果这些网络更改都不适用于您,或者它们无法解决您的问题,请告知我们,以便我们进一步提供帮助.

  • 为什么AWS非常擅长使用它们的服务变得简单? (14认同)
  • 我突然看到了;它历史上一直有效,我认为我们的基础架构没有任何改变... (2认同)

eni*_*njo 11

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

缺乏创建工作 NAT 网关的规范。在GitHub 问题上,亚马逊技术人员不断重复您“只”需要私有 IP + NAT,但事实并非如此。我与这个自己奋斗了很多,但终于得到了它正常工作,而无需使用公共IP为我Fargate服务。

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

  • 一个公共子网与Internet网关允许双向互联网接入
  • 一个私人用NAT网关子网允许只有外出上网

您可以通过两种方式创建这样一个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, ActionsAttach to VPC并将其附加到焦点 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子网中的每个服务都只能访问传出Internet(是的,private没有公共 IP的子网中的 Fargate 和 EC2 服务将具有 Internet 访问权限)。