我正在使用AWS ECS来托管我的服务。当我尝试使用fargate定义任务时,我遇到了以下问题。
CannotPullContainerError:API错误(500):获取https://xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/:net / http:请求在等待连接时被取消(等待标题时超出Client.Timeout)
此外,我还授予IAM用户访问ECR的完全权限。请帮我解决这个问题。
答案 0 :(得分:11)
看看这里:https://github.com/aws/amazon-ecs-agent/issues/1128
特别是samuelkarp
的评论您在下面看到的错误通常是由于缺少互联网 访问拉图像。图像拉动通过网络发生 Task使用的接口,如此共享安全组和 路由规则。
请检查您的配置以了解以下内容:
如果您要启动没有公共IP的任务,请确保执行此操作 子网上的路由表有" 0.0.0.0/0"去NAT网关或 NAT实例,以确保访问互联网。如果您的路线表有 一个互联网网关,这就像一个防火墙,并防止 与之建立联系。如果您要与公众一起启动任务 IP,确保子网上的路由表有" 0.0.0.0/0"去 到互联网网关,以确保您将能够使用公共IP 成功进入流量。验证您的安全组规则 任务允许出站访问。此处的默认值通常为All 流量为0.0.0.0/0。如果这些网络更改都不适用 您或如果他们不解决您的问题,请告诉我们,以便我们可以 进一步协助。
答案 1 :(得分:1)
我已经回答了这个here,但是复制粘贴并不会造成伤害。
缺少用于创建有效NAT网关的规范。在GitHub issue,Amazon技术人员会不断重复您“只是”需要私有IP + NAT的事实,但是事实并非如此。我为此进行了很多努力,但最终使它正常工作,而未在我的Fargate服务中使用公共IP。
要使Fargate服务在没有公共IP的情况下访问Internet,您需要设置一个具有2个子网的VPC:
您可以通过两种方式创建这样的VPC:通过转到Services
> VPC
> VPC Dashboard
,单击Launch VPC Wizard
并选择"VPC with Public and Private Subnets"
;或手动:
注意:以下所有步骤均在Services
> VPC
Your VPCs
和Create a VPC
Subnets
和Create subnet
2次
private
子网
public
子网
Internet Gateways
和Create internet gateway
Internet Gateway
,Actions
,Attach to VPC
并将其附加到重点VPC上NAT Gateways
和Create NAT Gateway
public
子网Create New EIP
或使用现有的已有的Available
Route Tables
和Create route table
2次
private
路由表
Routes
标签,Edit routes
Add route
,目标:0.0.0.0/0
,目标是先前创建的NAT网关和Save routes
Actions
和Set Main Route Table
(如果尚未选择)public
路由表
Routes
标签,Edit routes
Add route
,目标:0.0.0.0/0
,定位到先前创建的Internet网关和Save routes
Subnet Associations
标签,Edit subnet associations
public
子网Save
您放置在 public
子网中的每个服务将具有双向互联网访问权限,并且您放置在 private
中的每个服务< / strong>子网将仅具有传出互联网访问权限(是的, private
子网中具有公网IP的Fargate和EC2服务将具有互联网访问权限。)>