网桥模式 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

网桥模式

bridge 网络模式仅支持 Amazon EC2 实例上托管的 Amazon ECS 任务。

bridge 模式下,您使用虚拟网桥在主机和容器的网络之间创建一个层。这样,您就可以创建将主机端口重新映射到容器端口的端口映射。映射可以是静态,也可以是动态。

该图显示了使用桥接网络模式和静态端口映射的网络架构。

使用静态端口映射,您可以明确定义要映射到容器端口的主机端口。使用上面的示例,主机上的端口 80 被映射到容器上的端口 3000。要与容器化应用程序通信,您需要将流量发送到 Amazon EC2 实例的 IP 地址的端口 80。从容器化应用程序的角度来看,它可以看到端口 3000 上的入站流量。

如果您只想更改流量端口,则静态端口映射是合适的。但是,这仍然具有与使用 host 网络模式相同的缺点。在每台主机上只能运行一个任务的单个实例化。这是因为静态端口映射仅允许将单个容器映射到端口 80。

要解决此问题,请考虑使用带有动态端口映射的 bridge 网络模式,如下图所示。

该图显示了使用桥接网络模式和动态端口映射的网络架构。

通过不在端口映射中指定主机端口,您可以让 Docker 从临时端口范围中选择随机的、未使用的端口,并将其分配为容器的公共主机端口。例如,监听容器上端口 3000 的 Node.js 应用程序可能会被分配一个随机的大数值端口,例如 Amazon EC2 主机上的 47760。这样做意味着您可以在主机上运行该容器的多个副本。此外,还可以在主机上为每个容器分配自己的端口。容器的每个副本都会在端口 3000 上接收流量。但是,向这些容器发送流量的客户端使用随机分配的主机端口。

Amazon ECS 可帮助您跟踪为每项任务随机分配的端口。它通过自动更新负载均衡器目标组和 Amazon Cloud Map 服务发现以包含任务 IP 地址和端口列表来实现此目的。这样可以更轻松地使用通过动态端口使用 bridge 模式运行的服务。

但是,使用 bridge 网络模式的一项缺点是,很难将服务锁定为服务通信。由于服务可能会分配给任何随机的、未使用的端口,因此有必要在主机之间开放广泛的端口范围。但是,要创建特定的规则,使某项特定服务只能与另一项特定服务进行通信并不容易。这些服务没有用于安全组网络规则的特定端口。