AWS:从请求者 VPC 中的 fargate 任务连接到接受者 VPC 中的 VPC 端点

AWS: connect to VPC endpoint in Accepter VPC from fargate task in Requester VPC

我在同一账户和区域内有两个 VPC,VPC-AVPC-B。我在两者之间创建了一个 VPC 对等连接,其中 VPC-A 是接受者,VPC-B 是请求者。

VPC-A 包含一些能够访问 AWS 服务(ECR、SSM、日志)的接口端点w/o public IP(工作正常)。

现在我想在 VPC-B 中启动一个 Fargate 任务,它也没有 public IP,希望我可以使用对等连接访问 [=] 中所需的端点10=],但我做不到。

当我在 VPC-B 中启动 fargate 任务时,我收到 CannotPullContainerError 消息:

request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

表示无法到达终点

但是,当我 运行 使用同一任务的弹性网络接口作为源,并将所需的 VPC 端点作为目标进行可达性分析时,它 returns 结果是 Reachable具有预期路径(已编辑 ID):

我想我可能在某处缺少一些配置,但是在哪里?或者这甚至可能吗?

考虑 DNS。

您的 fargate 服务需要将 com.amazonaws.eu-west-1.ecr.dkr 等路由到 vpc-b 中的 IP 地址,而不是通过互联网网关。

我认为当您在 vpc-a 中创建端点并为其启用 dns 时,它会创建一个私有托管区域,其中包含如下记录:

com.amazonaws.eu-西-1.ecr.dkr = [ip.address.1, ip.address.2]

数组中的每条记录都是您创建的接口端点的 IP。 私有托管区域附加到 VPC-A 但对您隐藏,因此您不能只将其附加到 VPC-B。

我认为您没有遗漏任何直接配置,即接口端点的目的是在单个 vpc 中工作。

但是,您可以通过多种方式使其在 vpc-b 中运行。这些未经测试,有点老套,可能不值得付出努力,但可能会奏效。

选项 1:

例如为域 com.amazonaws.eu-west-1.ecr.dkr 创建一个私有托管并将其附加到 vpc-b。 在区域顶点为您的接口的 vpc-a 中的每个 IP 地址创建一个具有多个值的 A 记录。

您需要为所有必需的接口重复此操作,因此可能有点乏味。 理论上 dns 将首先解析此记录,然后通过对等连接将其路由到接口 IP。

选项2.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html

您可以尝试添加条目,例如:

com.amazonaws.eu-西-1.ecr.dkr=ip.address.1

您只能为给定域添加一个 IP 地址,但理论上该任务应该通过对等连接将该流量路由到接口。

假设您的接口端点策略和安全组不会阻止网络流量。

同样,这可能行不通,但可能会为您指明问题所在的方向,希望无论如何