我正在使用 AWS ECS 来托管我的服务。当我尝试用 Fargate 定义任务时,我遇到了以下问题。
CannotPullContainerError:API 错误(500):获取https://xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/:net/http:在等待连接时取消请求(等待标头时超出 Client.Timeout )
此外,我还授予了在 IAM 用户中访问 ECR 的完全权限。请帮我解决这个问题。
我正在使用 AWS ECS 来托管我的服务。当我尝试用 Fargate 定义任务时,我遇到了以下问题。
CannotPullContainerError:API 错误(500):获取https://xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/:net/http:在等待连接时取消请求(等待标头时超出 Client.Timeout )
此外,我还授予了在 IAM 用户中访问 ECR 的完全权限。请帮我解决这个问题。
看看这里:https ://github.com/aws/amazon-ecs-agent/issues/1128
您在下面看到的错误通常是由于无法访问 Internet 来提取图像。图像拉取发生在任务使用的网络接口上,因此共享安全组和路由规则。
请检查您的配置以了解以下内容:
如果您在没有公共 IP 的情况下启动任务,请确保子网上的路由表有“0.0.0.0/0”到 NAT 网关或 NAT 实例以确保访问 Internet。如果您的路由表有一个互联网网关,这就像一个防火墙并阻止建立连接。如果您使用公共 IP 启动任务,请确保子网上的路由表具有“0.0.0.0/0”到 Internet 网关,以确保您能够成功使用公共 IP 进行入口流量。验证任务的安全组规则是否允许出站访问。这里的默认值通常是所有流量到 0.0.0.0/0。如果这些网络更改均不适用于您,或者它们不能解决您的问题,请告知我们,以便我们进一步提供帮助。
我已经在这里回答了这个问题,但是复制粘贴并没有什么坏处。
缺少创建工作 NAT 网关的规范。在GitHub 问题上,亚马逊技术人员不断重复您“只是”需要私有 IP + NAT,但事实并非如此。我自己为此苦苦挣扎,但最终在不为我的 Fargate 服务使用公共 IP 的情况下让它正常工作。
要让 Fargate 服务在没有公共 IP 的情况下访问 Internet,您需要设置一个具有 2 个子网的 VPC:
您可以通过 2 种方式创建这样的 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
,并将其附加到焦点所在的 VPCActions
Attach to 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
子网的每项服务都将具有双向Internet 访问权限,并且您放入private
子网中的每项服务都将仅具有传出private
Internet 访问权限(是的,没有公共 IP的子网中的 Fargate 和 EC2 服务将具有 Internet 访问权限)。