cud*_*der 3 amazon-web-services amazon-ecs amazon-vpc amazon-ecr
根据NAT 网关上的 AWS 文档,它们不能通过VPC 端点发送流量,除非以以下方式设置:
NAT 网关无法通过 VPC 端点发送流量 [...]。如果私有子网中的实例必须通过 VPC 终端节点访问资源 [...],请使用私有子网的路由表将流量直接路由到这些设备。
按照文档中的这个示例,我为我的 ECS 应用程序创建了以下配置:
vpc-app具有 CIDR 172.31.0.0/16 的VPC ( )。subnet-app具有以下路由表的应用子网 ( ): Destination | Target
----------------|-----------
172.31.0.0/16 | local
0.0.0.0/0 | nat-main
Run Code Online (Sandbox Code Playgroud)
nat-main)具有以下路由表:vpc-appdefault-1 Destination | Target
----------------|--------------
172.31.0.0/16 | local
0.0.0.0/0 | igw-xxxxxxxx
Run Code Online (Sandbox Code Playgroud)
sg-app) 为subnet-app.打开端口 443 。vpc-app, subnet-appand sg-appfor the following services: com.amazonaws.eu-west-1.ecr.api
com.amazonaws.eu-west-1.ecr.dkr
com.amazonaws.eu-west-1.ecs
com.amazonaws.eu-west-1.ecs-agent
com.amazonaws.eu-west-1.ecs-telemetry
com.amazonaws.eu-west-1.s3 (Gateway)
Run Code Online (Sandbox Code Playgroud)
同样重要的是要提的是我已经启用了DNS解析和DNS主机名的vpc-app,还有启用专用DNS名称的选项ecr-dkr和ecr-apiVPCEs,这里是细节部分的两张截图:
ECR-DKR和ECR-API。
我也尝试过只使用Fargate容器,因为它们没有ECS Agent的额外复杂性,并且因为根据文档:
使用 Fargate 启动类型的任务只需要 com.amazonaws.region.ecr.dkr Amazon ECR VPC 终端节点和 Amazon S3 网关终端节点即可利用此功能。
这也不起作用,每次我的Fargate任务运行时,我都会看到Bytes out to source undernat-main的Monitoring。
无论我尝试什么,其中的 EC2 实例(和 Fargate 任务)subnet-app仍在使用nat-main而不是去往 ECR 服务的本地地址拉取图像。
我已重新启动ECS 代理并确保选中ECS 接口 VPC 端点指南和ECR 接口端点指南中的所有复选框。
我在这里缺少什么?
任何帮助,将不胜感激。
经过数小时的反复试验,并在@jogold 的大量帮助下,在这篇博文中找到了缺失的部分:
下一步是为 S3 创建网关 VPC 端点。这是必要的,因为 ECR 使用 S3 来存储 Docker 镜像层。当您的实例从 ECR 下载 Docker 镜像时,它们必须访问 ECR 以获取镜像清单和 S3 以下载实际的镜像层。
在我创建了 S3 网关 VPCE 之后,我忘记将其地址添加到subnet-app的路由表中,因此尽管对我的 ECR URI 的初始请求是使用内部地址进行的,但从 S3 下载图像仍然使用了 NAT 网关。
添加条目后,NAT网关的网络使用率急剧下降。
可以在此处找到有关如何设置 Gateway VPCE 的更多信息。
接口 VPC 终端节点使用 DNS 解析,而不是路由。
为了使配置生效,您需要确保在创建终端节点时选中启用专用 DNS 名称。这使您能够使用默认 DNS 主机名而不是特定于端点的 DNS 主机名向服务发出请求。
从文档中:
当您创建接口端点时,我们会生成端点特定的 DNS 主机名,您可以使用它们与服务进行通信。对于 AWS 服务和 AWS Marketplace 合作伙伴服务,您可以选择为终端节点启用私有 DNS。此选项将私有托管区域与您的 VPC 关联。托管区域包含服务的默认 DNS 名称(例如 ec2.us-east-1.amazonaws.com)的记录集,该名称解析为 VPC 中终端节点网络接口的私有 IP 地址。这使您能够使用默认 DNS 主机名而不是特定于端点的 DNS 主机名向服务发出请求。例如,如果您的现有应用程序向 AWS 服务发出请求,它们可以继续通过接口终端节点发出请求,而无需更改任何配置。
另一种方法是更新您的应用程序以使用特定于端点的 DNS 主机名。
请注意,要使用私有 DNS 名称,必须为您的 VPC 启用DNS 解析和DNS 主机名:
另请注意,为了在没有 NAT 网关的情况下使用 ECR/ECS,您需要配置 S3 终端节点(网关,需要更新路由表)以允许实例从托管它们的底层私有 Amazon S3 存储桶下载图像层。更多信息请参阅为 Amazon ECS 和 Amazon ECR 设置 AWS PrivateLink
| 归档时间: |
|
| 查看次数: |
4104 次 |
| 最近记录: |