Overlay 网络驱动
overlay
网络驱动在多个 Docker 守护进程主机之间创建一个分布式网络。此网络位于主机特定网络之上(叠加),在启用加密时,连接到此网络的容器可以安全地进行通信。Docker 透明地处理每个数据包进出正确 Docker 守护进程主机和正确目标容器的路由。
你可以使用 docker network create
创建用户定义的 overlay
网络,就像创建用户定义的 bridge
网络一样。服务或容器可以同时连接到一个或多个网络。服务或容器只能在其连接到的网络之间进行通信。
叠加网络通常用于在 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
--attachable
选项使独立容器和 Swarm 服务都可以连接到叠加网络。没有 --attachable
,只有 Swarm 服务可以连接到网络。
你可以指定 IP 地址范围、子网、网关和其他选项。有关详情,请参见 docker network create --help
。
在叠加网络上加密流量
使用 --opt encrypted
标志加密在叠加网络上传输的应用数据:
$ docker network create \
--opt encrypted \
--driver overlay \
--attachable \
my-attachable-multi-host-network
这会在 VXLAN(虚拟可扩展局域网)层面启用 IPsec 加密。此加密会带来不可忽略的性能开销,因此在生产环境中使用此选项之前应进行测试。
警告
不要将 Windows 容器连接到加密的叠加网络。
叠加网络加密在 Windows 上不受支持。Windows 主机尝试连接到加密叠加网络时,Swarm 不会报告错误,但 Windows 容器的网络会受到以下影响:
- Windows 容器无法与网络上的 Linux 容器通信
- 网络上 Windows 容器之间的数据流量不会被加密
将容器附加到叠加网络
将容器添加到叠加网络后,它们就能够与其他容器通信,而无需在单独的 Docker 守护进程主机上设置路由。执行此操作的前提是主机已加入同一 Swarm。
将 busybox
容器加入到名为 multi-host-network
的叠加网络:
$ 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 端口 8080 ,并将容器中的 UDP 端口 80 映射到叠加网络上的 UDP 端口 8080 。 |
叠加网络的连接限制
由于 Linux 内核设置的限制,当同一主机上共同定位 1000 个容器时,叠加网络会变得不稳定,容器间通信可能会中断。
有关此限制的更多信息,请参阅 moby/moby#44973。