是否可以在AWS ECS EC2实例上的同一任务中使用不同容器的网络堆栈?

问题描述 投票:0回答:1

我想在一个 ECS 任务中运行两个容器。

容器 1 应使用默认的 docker 网络模式运行

bridge

容器 2 应使用第一个容器的网络堆栈。使用 docker run 可以像

docker run --network container:container1 container2
那样完成。

我看不到在 CloudFormation 模板中设置此选项的任何可能性,因为仅为整个任务指定了网络模式。

我已经尝试在本地环境中运行所有内容,即

docker run
两个容器相继运行。这个效果很好。

我无法尝试使用 AWS 进行任何操作,因为我不知道在哪里可以定义我想要的网络模式。我阅读了以下文档:

遗憾的是,没有任何东西能指引我走向我想要的设置方向。

有人知道这是如何运作的吗?这在 AWS 上是否可能/有意做到?那么还有什么替代方案呢?

amazon-web-services amazon-ec2 amazon-ecs docker-networking
1个回答
0
投票

ECS 没有提供一种直接的方法来通过 CloudFormation 直接设置一个容器的网络模式以使用另一个容器的网络堆栈(即 Docker CLI 中的

--network container:<container_name>
)。 ECS 任务定义的
networkMode
属性适用于任务中的所有容器。

实现这一目标的几种方法:

  1. 使用主机联网模式: 如果您将 ECS 任务定义设置为使用

    host
    网络模式,则任务中的所有容器将共享 EC2 主机实例的网络命名空间。虽然这确实使容器能够共享网络堆栈,但它不仅限于这两个容器,因此如果考虑容器之间的隔离,它可能并不理想。

  2. AWS VPC 模式下的共享网卡: 当您使用

    awsvpc
    网络模式时,每个任务都会获得自己的弹性网络接口 (ENI) 和私有 IP 地址。尽管这不允许一个容器利用另一个容器的确切网络堆栈,但它确实为每个任务提供了自己的网络命名空间。它提供比
    host
    模式更好的隔离。如果您可以重新思考或重新设计您的架构以利用
    awsvpc
    模式,从长远来看可能是有益的,尤其是在云环境中。

  3. Service Mesh 与 App Mesh: 如果您的主要目标是在容器或服务之间进行通信,您可以考虑使用 AWS App Mesh。 App Mesh 是一个服务网格,它提供应用程序级网络,使您的服务可以轻松地跨多种类型的计算基础设施相互通信。虽然它不能为您的问题提供准确的解决方案,但它可以让您更好地控制服务之间的通信。

© www.soinside.com 2019 - 2024. All rights reserved.