NIr*_*odi 61 amazon-web-services amazon-ecs docker-registry aws-fargate
我正在尝试在 aws-ecs-fargate-1.4.0 平台上运行一个私有存储库。
对于私有存储库身份验证,我遵循了文档并且运行良好。
以某种方式更新现有服务多次后,它无法运行任务并抱怨错误,例如
ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to get registry auth from asm: service call has been retried 1 time(s): asm fetching secret from the service for <secretname>: RequestError: ...
Run Code Online (Sandbox Code Playgroud)
我没有更改它ecsTaskExecutionRole,它包含获取秘密值所需的所有策略。
nat*_*eck 70
AWS 员工在这里。
您所看到的原因是 Fargate 平台版本 1.3.0 和 Fargate 平台版本 1.4.0 之间的网络工作方式发生了变化。作为从使用 Docker 到使用 containerd 的变化的一部分,我们还对网络的工作方式进行了一些更改。在 1.3.0 及以下版本中,每个 Fargate 任务都有两个网络接口:
不过,这个辅助网络接口有一些缺点。此辅助流量未显示在您的 VPC 流日志中。此外,虽然大多数流量留在客户 VPC 中,但辅助网络接口正在向您的 VPC 之外发送流量。许多客户抱怨他们没有能力在这个辅助网络接口上指定网络级别的控制以及它能够连接到什么。
为了减少网络模型的混乱并为客户提供更多控制权,我们在 Fargate 平台版本 1.4.0 中更改为使用单个网络接口并将所有流量保留在您的 VPC 内,甚至是 Fargate 平台流量。用于获取 ECR 身份验证和任务机密的 Fargate 平台流量现在使用与其余任务流量相同的任务网络接口,您可以在 VPC 流日志中观察此流量,并使用您自己的 AWS VPC 中的路由表控制此流量.
但是,随着观察和控制 Fargate 平台网络的能力增强,您还需要负责确保在您的 VPC 中实际配置了一个网络路径,允许任务与 ECR 和 AWS Secrets Manager 进行通信。
有几种方法可以解决这个问题:
您可以在此官方博客文章中阅读有关此更改的更多信息,在“任务弹性网络接口 (ENI) 现在运行其他流量”部分下
https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/
Rob*_*eiz 14
我不完全确定您的设置,但在我禁用 NAT 网关以节省一些美元后,我在 aws-ecs-fargate-1.4.0 平台上收到了非常相似的错误消息:
Stopped reason: ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 1 time(s): RequestError: send request failed caused by: Post https://api.ecr....
Run Code Online (Sandbox Code Playgroud)
事实证明,我必须为这些服务名称创建 VPC 端点:
我不得不降级到 aws-ecs-fargate-1.3.0 平台。降级后,可以从 ECR 中提取 Docker 映像,并且部署再次成功。
如果您使用的是没有 NAT 网关的机密管理器,则可能需要为com.amazonaws.REGION.secretsmanager.
Pow*_*chu 12
将 Cloudformation 文件转换为 Terraform 文件后,我遇到了这个问题。
经过一番努力,我发现我的 Fargate 安全组中缺少一条出站规则。事实上,AWS 会自动创建“ALLOW ALL”规则,但 terraform 会禁用它。您需要添加到您的aws_security_group:
resource "aws_security_group" "example" {
# ... other configuration ...
egress = [
{
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看文档。
Ali*_*Ali 11
当 Fargate 代理无法创建或引导启动容器所需的资源或任务所属的资源时,会发生此错误。此错误仅在使用平台版本 1.4 或更高版本时发生,很可能是因为版本 1.4 使用 Task ENI(位于您的 VPC 中)而不是 Fargate ENI(位于 AWS 的 VPC 中)。我认为这可能是由于需要从 ECR 中提取图像所需的额外 IAM 权限造成的。你在使用任何私人链接吗?如果是,您可能想查看 ECR 端点的策略。
我会尝试复制它,但如果可以的话,我建议您向 AWS 开一张支持票,这样他们就可以仔细查看您的资源并提出更好的建议。
Man*_*gal 10
确保通过IGW或确保互联网连接NAT,并确保公共 IP 已启用(如果其 IGW 在 Fargate 任务/服务网络配置中)。
{
"awsvpcConfiguration": {
"subnets": ["string", ...],
"securityGroups": ["string", ...],
"assignPublicIp": "ENABLED"|"DISABLED"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
对于我的情况,我尝试了上述所有解决方案,但似乎没有一个有效。这是一个非常简单的错误,但如果没有一个答案适合您,其他人可能会发现有用的错误。
任务定义 json 文件的部分需要valueFrom在值的末尾。containerDefinition::
即就我而言:
{
"containerDefinitions": [{
"secrets": [{
"name": "MY_SECRET",
"valueFrom": "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<sm_resource_name>:MY_SECRET"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
正确的格式是:
{
"containerDefinitions": [{
"secrets": [{
"name": "MY_SECRET",
"valueFrom": "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<sm_resource_name>:MY_SECRET::"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
::请注意正确解决方案末尾的额外内容valueFrom。
转至任务定义 > 更新任务定义。在任务角色下拉列表中选择ecsTaskExecutionRole。
您需要ecsTaskExecutionRole在 IAM 设置中修改此设置以包含以下权限:
然后创建新的任务定义并且应该可以工作。
参考: https: //docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-parameters.html
小智 6
由于 FARGATE 1.4.0 版中的 ECS 代理使用任务 ENI 来检索信息,因此对 Secret Manager 的请求将通过此 eni。
您必须确保 Secret Manager api (secretsmanager.{region}.amazonaws.com) 的流量是 'open' :
如果您的任务是私有的,您必须有一个 vpc 端点 (com.amazonaws.{region}.secretsmanager) 或 NAT 网关,并且任务 ENI 的安全组必须允许 https 出站流量到它。
如果您的任务是公开的,则安全组必须允许 https 出站流量到外部(或 AWS 公共 cidrs)。
如果您使用的是公共子网并选择“不分配公共地址”,则可能会发生此错误。
如果您有一个私有子网并且您的 VPC 中没有互联网网关或 NAT 网关,这同样适用。它需要一条通往互联网的路线。
这是整个 AWS 生态系统的相同行为。如果 AWS 能够在这种情况下显示大横幅警告,那就太好了。
该服务的安全组需要端口 443 上的出站访问(所有端口上的出站访问都适用)。否则,它无法访问 Secrets Manager。
新的 VPC 连接映射对解决这个问题有很大帮助。确保您的公共子网有到互联网网关的路由,您的配置应如下所示:
如果没有,那么您将需要更改或添加路由表。
至少有一个子网能够连接到互联网网关。
您需要这个来确保 ECS 可以从公共 url 中提取图像
| 归档时间: |
|
| 查看次数: |
39452 次 |
| 最近记录: |