我正在尝试在 aws-ecs-fargate-1.4.0 平台上运行私有存储库。
对于私有存储库身份验证,我遵循了docs https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html而且效果很好。
不知何故,在多次更新现有服务后,它无法运行任务并抱怨类似的错误
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: ...
我没有改变ecsTaskExecutionRole
它包含获取秘密值所需的所有策略。
- AmazonECSTaskExecutionRolePolicy
- CloudWatch完全访问
- AmazonECSTaskExecutionRolePolicy
- 获取秘密值
- 获取SSM参数
AWS 员工在这里。
您所看到的情况是由于 Fargate 平台版本 1.3.0 和 Fargate 平台版本 1.4.0 之间网络工作方式的变化所致。作为从使用 Docker 更改为使用 containerd 的一部分,我们还对网络的工作方式进行了一些更改。在 1.3.0 及以下版本中,每个 Fargate 任务都有两个网络接口:
- 一个网络接口用于处理来自应用程序容器的应用程序流量,以及日志和容器映像层拉取。
- Fargate 平台使用辅助网络接口
本身,以获取 ECR 身份验证凭据并获取机密。
不过,这个辅助网络接口有一些缺点。此辅助流量未显示在您的 VPC 流日志中。此外,虽然大多数流量保留在客户 VPC 中,但辅助网络接口正在将流量发送到您的 VPC 之外。许多客户抱怨他们无法指定此辅助网络接口上的网络级别控制及其能够连接的内容。
为了减少网络模型的混乱并为客户提供更多控制权,我们在 Fargate 平台版本 1.4.0 中更改为使用单个网络接口并将所有流量(甚至是 Fargate 平台流量)保留在 VPC 内。用于获取 ECR 身份验证和任务机密的 Fargate 平台流量现在使用与其余任务流量相同的任务网络接口,您可以在 VPC 流日志中观察此流量,并使用您自己的 AWS VPC 中的路由表控制此流量。
然而,随着观察和控制 Fargate 平台网络的能力增强,您还需要负责确保您的 VPC 中实际配置了一个网络路径,允许任务与 ECR 和 AWS Secrets Manager 进行通信。
有几种方法可以解决这个问题:
- 将任务启动到具有公共 IP 地址的公共子网中,以便它们可以使用互联网网关与 ECR 和其他支持服务进行通信
- 在私有子网中启动任务,该子网具有配置为通过公有子网中的 NAT 网关路由出站流量的 VPC 路由表。这样,NAT 网关就可以代表任务打开与 ECR 的连接。
- 在私有子网中启动任务,并确保您在 VPC 中配置了 AWS PrivateLink 终端节点,以获取所需的服务(用于图像拉取身份验证的 ECR、用于图像层的 S3 以及用于密钥的 AWS Secrets Manager)。
您可以在这篇官方博文的“任务弹性网络接口 (ENI) 现在运行额外的流量”部分中阅读有关此更改的更多信息
https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/ https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/
Update:我创建了一个基础设施即代码模板,该模板部署了一个配置为避免出现此 ResourceInitializationError 的 VPC。它附带了一个图表,可以更好地展示工作 VPC 的外观。很难将所有内容嵌入到这个答案中,所以请参考这个官方的AWS模式作为参考:https://containersonaws.com/pattern/large-vpc-for-amazon-ecs-cluster https://containersonaws.com/pattern/large-vpc-for-amazon-ecs-cluster
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)