【发布时间】:2019-09-17 11:52:36
【问题描述】:
根据NAT Gateways 上的 AWS 文档,它们无法通过 VPC endpoints 发送流量,除非以下列方式设置:
NAT 网关无法通过 VPC 端点发送流量 [...]。如果私有子网中的实例必须通过 VPC 端点访问资源 [...],请使用私有子网的路由表将流量直接路由到这些设备。
按照文档中的this 示例,我为我的 ECS 应用创建了以下配置:
- 具有 CIDR 172.31.0.0/16 的 VPC (
vpc-app)。 - 具有以下路由表的应用子网 (
subnet-app):
Destination | Target
----------------|-----------
172.31.0.0/16 | local
0.0.0.0/0 | nat-main
- 子网
default-1中vpc-app中的NAT 网关(nat-main) 具有以下路由表:
Destination | Target
----------------|--------------
172.31.0.0/16 | local
0.0.0.0/0 | igw-xxxxxxxx
- 安全组 (
sg-app) 为subnet-app打开端口 443。 - 具有
vpc-app、subnet-app和sg-app的 VPC 终端节点(接口类型)用于以下服务:
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)
还有一点很重要,我为vpc-app 启用了DNS 解析 和DNS 主机名,以及启用私有DNS 名称 ecr-dkr 和 ecr-api VPC 端点的 em> 选项。
我也尝试过只使用 Fargate 容器,因为它们没有 ECS 代理 的额外复杂性,并且因为根据文档:
使用 Fargate 启动类型的任务只需要 com.amazonaws.region.ecr.dkr Amazon ECR VPC 终端节点和 Amazon S3 网关终端节点即可利用此功能。
这也不起作用,每次我的 Fargate 任务运行时,我都会在 nat-main 的 MonitoringBytes out to source 的峰值/em>。
无论我尝试什么,subnet-app 中的 EC2 实例(和 Fargate 任务)仍在使用 nat-main 拉取映像,而不是转到 ECR 服务的本地地址。
我已重新启动 ECS 代理,并确保选中 ECS Interface VPC Endpoints 指南和 ECR Interface Endpoints 指南中的所有框。
我在这里错过了什么?
任何帮助将不胜感激。
【问题讨论】:
-
安全组需要修改吗?
-
是的,您需要为子网启用端口 443 的访问权限,我已经这样做了。
标签: amazon-web-services amazon-ecs amazon-vpc amazon-ecr