【问题标题】:ECS service cannot pull from ECRECS 服务无法从 ECR 拉取
【发布时间】:2022-12-22 02:26:41
【问题描述】:

ECS Fargate(ver 1.4.0)服务创建失败并出现以下错误

Resource initilization error unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth
Request error caused by post https://api.ecr.us-XX.amazon.aws.com timeout

我检查过的东西

  1. ECS安全组允许所有流量
  2. 已为 ecr.api 和 ecr.dkr 正确创建 VPC 端点
  3. ECS 任务执行角色有权限从 ECR 获取图像

【问题讨论】:

  • 您的 ecs 服务是否可以访问互联网?
  • @Marcin 不,但我们已经创建了 vpce 端点
  • 可能它们设置不正确。
  • 超时表示某些东西阻塞了网络流量。我首先检查附加到端点的安全组,以验证它是否允许访问 VPC 的其余部分。也有可能存在不允许流量的网络 ACL。或者子网的错误路由规则。
  • 您的 ECS 任务需要访问 IAM 用户,为此您需要在加载时注入 AWS_<creds>,然后您可能需要将 AWS_<creds> 添加到 secrets-manager 中。然后直接从 ECS 任务中提取秘密

标签: amazon-web-services amazon-ecs amazon-vpc aws-fargate


【解决方案1】:

我遇到了同样的问题,(认为)我进行了同样的检查,这个错误让我发疯。

我实际上通过实现我的 ECS 任务安全组仅限于我的 VPC 的 CIDR 块来解决它,即使任务将在私有子网中它需要完全开放的出口和入口访问,以便它可以访问 ECR,因为它通过外部互联网.

所以不是这样的:

ingress {
 protocol         = "tcp"
 from_port        = var.container_port
 to_port          = var.container_port
 cidr_blocks      = [var.vpc_cidr_block] #or cap later from ALB and ILB
}

您应该让 SG 处理打开的任务,例如:

ingress {
  protocol         = "tcp"
  from_port        = var.container_port
  to_port          = var.container_port
  cidr_blocks      = ["0.0.0.0/0"] 
}

这适用于出口和入口。事实上,在我添加这个之后,我删除了 VPC 端点,它仍然有效,甚至不需要它们。抓图的作用还是有必要的,虽然我只是用了AWS managed AmazonECSTaskExecutionRolePolicy

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2020-04-25
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多