什么是 Overlay network driver?
Source: Dev.to

overlay 网络驱动在多个 Docker 守护进程主机之间创建一个分布式网络。该网络位于(覆盖)主机特定网络之上,当启用加密时,连接到该网络的容器可以安全通信。Docker 会透明地处理每个数据包的路由,使其能够到达正确的 Docker 守护进程主机以及目标容器。
你可以使用 docker network create 创建用户自定义的 overlay 网络,就像创建用户自定义的 bridge 网络一样。服务或容器可以同时连接多个网络,但它们只能在都已连接的网络之间通信。
Overlay 网络常用于连接 Swarm 服务,也可以用于连接运行在不同主机上的独立容器。使用独立容器时,仍然需要 Swarm 模式来建立主机之间的连接。
Overlay 网络所需的端口
在开始之前,请确保参与的节点能够在网络上相互通信。每个参与 Overlay 网络的主机都必须打开以下端口:
- 2377/tcp – Swarm 控制平面(可通过
docker swarm join --listen-addr配置) - 4789/udp – Overlay 流量(可通过
docker swarm init --data-path-addr配置) - 7946/tcp 和 7946/udp – 节点通信(不可配置)
创建 Overlay 网络
初始化 Docker Swarm
docker swarm init
此命令在主机上初始化 Docker Swarm 并创建一个 Swarm 管理节点。
创建 Overlay 网络
docker network create --driver overlay my-overlay-network
你也可以指定子网和网关:
docker network create --driver overlay \
--subnet=10.0.1.0/24 \
--gateway=10.0.1.1 \
my-overlay-network
若希望独立容器以及 Swarm 服务都能连接该网络:
docker network create --driver overlay --attachable my-overlay-network
--attachable 选项使独立容器和 Swarm 服务都能够连接到 Overlay 网络。若不使用该选项,则仅 Swarm 服务可以连接。
验证 Overlay 网络
docker network ls
在 Overlay 网络上加密流量
使用 --opt encrypted 标志为 Overlay 网络启用 IPsec 加密:
docker network create \
--opt encrypted \
--driver overlay \
--attachable \
my-attachable-multi-host-network
加密会带来显著的性能开销,因此在生产环境使用前请先进行测试。
将容器附加到 Overlay 网络
将容器加入 Overlay 网络后,它们可以在各自的 Docker 主机上无需手动路由即可相互通信。所有主机必须属于同一个 Swarm。
docker run --network multi-host-network busybox sh
注意: 由于 Linux 内核的限制,当约 1000 个容器共存于同一主机时,Overlay 网络可能会变得不稳定。