AWS:具有弹性IP的ECS服务

问题描述

我已经使用first run wizard of ECS on AWS console创建了集群,VPC,子网和Fargate服务,并将映像上传到了ECR并成功部署了。

现在,我需要该服务来访问远程数据库。因此,我需要在防火墙的白名单中添加IP。我分配了一个弹性IP,创建了NAT网关,并更新了this tutorial之后的路由器表。

我停止了任务,然后尝试再次运行它。但是,由于以下错误消息,我无法从ECR中提取图像以运行新任务:

CannotPullContainerError:来自守护程序的错误响应:Get https://account-id.dkr.ecr.sa-east-1.amazonaws.com/v2/:net / http:等待连接时请求被取消(等待标头时超过Client.Timeout)

我的设置:

  1. 具有CIDR 10.0.0.0/16的VPC(在ECS向导上自动创建)
  2. 具有以下路由器表的子网:
    Destination |   Target
----------------|-------------
10.0.0.0/16     | local
0.0.0.0/0       | nat-<nat-id>
  1. 在VPC上的NAT网关和在ECS向导中创建的子网以及分配的弹性IP。

  2. 当前,我允许入站和出站规则中的所有流量:

Type | Protocol | Port range | Source  | Description - optional
-----|----------|------------|---------|------------------------
All  | All      | All        |0.0.0.0/0| -

我想念什么?这是我完成自己想要的事情的唯一方法吗?有没有更简单的方法来实现? I found in Stack Overflow another way to associate an Elastic IP by using Application Load Balancer or Network Load Balancer。这是更好的方法吗?

解决方法

ECS向导创建具有两个公共子网 10.0.0.0/2410.0.1.0/24的VPC。它们都使用一个指向 Internet网关(IGW)的RT。但是,从您的问题来看,您似乎已将其修改为使用NAT。

遗憾的是,这已经不起作用,如您所知。要解决此问题,您可以创建一个第三个子网(如果需要HA,则可以创建更多子网)。子网将为私有,没有互联网连接。相反,它将有一个新的RT,它将Internet流量路由到NAT。您的Fargate任务将在专用子网中启动。

新子网的新RT为:

    Destination |   Target
----------------|-------------
10.0.0.0/16     | local
0.0.0.0/0       | nat-<nat-id>

应该修改两个原始公共子网的RT,以将流量路由到IGW,就像原来那样:

    Destination |   Target
----------------|-------------
10.0.0.0/16     | local
0.0.0.0/0       | IGW
,

我想解释一下。您收到CannotPullContainerError错误是因为没有通往互联网的路由。默认情况下,流向ECR的流量通过Internet。

您的Fargate服务在私有子网中运行,该子网没有到Internet的直接路由。为了获得Internet访问,运行Fargate任务的专用子网应在其路由表中具有路由,以将流量通过NatGateway路由到Internet(您已经完成了此操作)。在那里

    Destination |   Target
----------------|-------------
10.0.0.0/16     | local
0.0.0.0/0       | Natgateway

NatGateway只需将流量路由到Internet网关。 Nat网关部署在公共子网中,它将具有通过Internet网关到达Internet的路由。因此,部署Nat网关的子网应创建以下路由。

    Destination |   Target
----------------|-------------
10.0.0.0/16     | local
0.0.0.0/0       | InternetGateway

注意: 您还可以通过创建Private ECR VPC端点来与ECR私下交谈,而无需通过Internet。

Internet Gateway

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...