覆盖网络驱动程序

overlay 网络驱动程序在多个 Docker daemon 主机之间创建分布式网络。此网络位于主机特定网络的顶部(覆盖),允许连接到它的容器在启用加密时安全地进行通信。Docker 透明地处理从正确的 Docker daemon 主机到正确的目标容器的每个数据包的路由。

您可以使用 docker network create 创建用户定义的 overlay 网络,就像您可以创建用户定义的 bridge 网络一样。服务或容器可以同时连接到多个网络。服务或容器只能跨它们各自连接的网络进行通信。

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

本页描述了 Overlay 网络的一般情况,以及在与独立容器一起使用时的情况。有关 Swarm 服务 Overlay 的信息,请参阅 管理 Swarm 服务网络

创建 Overlay 网络

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

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

要创建一个其他 Docker 主机上的容器可以连接到的 Overlay 网络,请运行以下命令

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

--attachable 选项使独立容器和 Swarm 服务都可以连接到 Overlay 网络。如果没有 --attachable,只有 Swarm 服务才能连接到网络。

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

加密 Overlay 网络上的流量

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

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

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

警告

不要将 Windows 容器连接到加密的 Overlay 网络。

Windows 不支持 Overlay 网络加密。当 Windows 主机尝试连接到加密的 Overlay 网络时,Swarm 不会报告错误,但 Windows 容器的网络会受到如下影响:

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

将容器连接到 Overlay 网络

将容器添加到 Overlay 网络使它们能够与其他容器通信,而无需在各个 Docker daemon 主机上设置路由。执行此操作的先决条件是主机已加入相同的 Swarm。

要使用 busybox 容器加入名为 multi-host-network 的 Overlay 网络

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

注意

这只在 Overlay 网络可连接(使用 --attachable 标志创建)时才有效。

容器发现

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

标志值描述
-p 8080:80将容器中的 TCP 端口 80 映射到 Overlay 网络上的端口 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 8080端口,并将容器内的 UDP 80 端口映射到覆盖网络上的 UDP 8080端口。

Overlay 网络的连接限制

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

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

后续步骤