首页 > 解决方案 > AWS Fargate 集群无法使用 NAT 和 Internet 网关访问 Internet

问题描述

我正在尝试将容器部署到 AWS 上的私有网络 Fargate 集群。我的单个 VPC 上确实有一个 Internet 网关:

互联网网关

而且我确实在我的集群/服务所在的同一 VPC 中为该特定子网提供了一个 NAT 网关:

NAT网关

该子网的路由似乎也可以:

子网路由

并且服务的安全组不会阻止任何传入连接:

安全组

入站安全组

但是我的容器甚至没有以臭名昭著的异常开始:CannotPullContainerError:来自守护进程的错误响应:Get https://registry-name/:net/http: request cancelled while waiting for connection (Client.Timeout exceeded while waiting headers)为什么? 谢谢。

标签: amazon-web-servicesamazon-ecsaws-fargateamazon-ecr

解决方案


您没有将子网配置为使用 NAT 网关。您的路由表当前将流量直接发送到 IGW,这使子网成为公共子网,而不是私有子网,这意味着该子网中的任何内容都需要分配一个公共 IP。与其他资源位于同一子网中的 NAT 网关不会神奇地为这些资源提供 Internet 访问权限,您必须适当地配置路由表。

您的网络需要这样配置:

公共子网:

  • 附上IGW
  • NAT网关
  • 需要从 Internet 访问的任何其他公共资源,例如公共负载均衡器。

私有子网:

  • 到公有子网中 NAT 网关的路由。没有到 IGW 的路由。

推荐阅读