覆盖网络驱动程序

网络驱动程序在多个 Docker 守护程序主机。此网络位于 (覆盖) 特定于主机的 网络,允许连接到它的容器在 已启用加密。Docker 透明地处理每个数据包到 以及从正确的 Docker 守护程序主机和正确的目标容器。overlay

您可以使用 创建用户定义的网络 与创建用户定义的网络的方式相同。服务业 或者容器可以一次连接到多个网络。Services 或 容器只能跨它们各自连接的网络进行通信。overlaydocker network createbridge

覆盖网络通常用于在 Swarm 服务之间创建连接, 但您也可以使用它来连接在不同 主机。使用独立容器时,您仍然需要使用 Swarm 模式在主机之间建立连接。

本页介绍了覆盖网络的一般情况,以及与独立网络一起使用时 器皿。有关 Swarm 服务的覆盖层的信息,请参阅管理 Swarm 服务网络

创建叠加网络

在开始之前,您必须确保参与的节点可以通过网络进行通信。 下表列出了需要向参与覆盖网络的每个主机开放的端口:

港口描述
2377/tcp默认的 Swarm 控制平面端口可通过 docker swarm join --listen-addr 进行配置
4789/udp默认叠加流量端口,可通过 docker swarm init --data-path-addr 配置
7946/tcp,7946/udp用于节点之间的通信,不可配置

要创建其他 Docker 主机上的容器可以连接的覆盖网络, 运行以下命令:

$ docker network create -d overlay --attachable my-attachable-overlay

该选项支持两个独立容器 和 Swarm 服务连接到覆盖网络。 如果没有 ,只有 Swarm 服务可以连接到网络。--attachable--attachable

您可以指定 IP 地址范围、子网、网关和其他选项。有关详细信息,请参阅。docker network create --help

加密覆盖网络上的流量

使用标志加密应用程序数据 通过 Overlay 网络传输:--opt encrypted

$ docker network create \
  --opt encrypted \
  --driver overlay \
  --attachable \
  my-attachable-multi-host-network

这将在虚拟可扩展 LAN (VXLAN) 级别启用 IPsec 加密。 这种加密会带来不可忽略的性能损失, 因此,您应该在生产中使用此选项之前对其进行测试。

警告

不要将 Windows 容器附加到加密的覆盖网络。

Windows 不支持覆盖网络加密。 当 Windows 主机 尝试连接到加密的覆盖网络, 但 Windows 容器的联网受到影响,如下所示:

  • Windows 容器无法与网络上的 Linux 容器通信
  • 网络上 Windows 容器之间的数据流量未加密

将容器附加到覆盖网络

将容器添加到覆盖网络使它们能够进行通信 替换为其他容器,而无需在单个 Docker 上设置路由 守护进程主机。执行此操作的先决条件是主机已加入同一个 Swarm。

要加入以容器命名的覆盖网络,请执行以下操作:multi-host-networkbusybox

$ docker run --network multi-host-network busybox sh

注意

这仅在叠加网络可附加时有效 (使用标志创建)。--attachable

容器发现

在覆盖网络上发布容器的端口会将端口打开到其他 容器。可以通过执行 DNS 查找来发现容器 使用容器名称。

标志值描述
-p 8080:80将容器中的 TCP 端口 80 映射到覆盖网络上的端口。8080
-p 8080:80/udp将容器中的 UDP 端口 80 映射到覆盖网络上的端口。8080
-p 8080:80/sctp将容器中的 SCTP 端口 80 映射到覆盖网络上的端口。8080
-p 8080:80/tcp -p 8080:80/udp将容器中的 TCP 端口 80 映射到覆盖网络上的 TCP 端口,并将容器中的 UDP 端口 80 映射到覆盖网络上的 UDP 端口。80808080

覆盖网络的连接限制

由于 Linux 内核设置的限制,覆盖网络变得不稳定,并且 当 1000 个容器共存时,容器间通信可能会中断 同一主机。

有关此限制的更多信息,请参阅 moby/moby#44973

后续步骤