覆盖网络驱动程序

overlay 网络驱动在多个 Docker 守护进程主机之间创建了一个分布式网络。该网络位于主机特定网络的上层(overlay),允许连接到它的容器在启用加密时进行安全通信。Docker 透明地处理每个数据包与正确的 Docker 守护进程主机和目标容器之间的路由。

您可以使用 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/tcp7946/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 守护进程主机上设置路由。这样做的前提是主机已加入同一个 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 映射到 overlay 网络上的端口 8080
-p 8080:80/sctp将容器中的 SCTP 端口 80 映射到 overlay 网络上的端口 8080
-p 8080:80/tcp -p 8080:80/udp将容器中的 TCP 端口 80 映射到 overlay 网络上的 TCP 端口 8080,并将容器中的 UDP 端口 80 映射到 overlay 网络上的 UDP 端口 8080

Overlay 网络的连接限制

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

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

后续步骤

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.