该overlay网络驱动程序会创建多个码头工人守护主机之间的分布式网络。该网络位于特定于主机的网络之上((覆盖)特定主机的网络),从而在启用加密后允许与其连接的容器(包括群集服务容器)进行安全通信。Docker透明地处理每个数据包与正确的Docker守护程序主机和正确的目标容器之间的路由。
初始化群集或将Docker主机加入现有群集时,将在该Docker主机上创建两个新网络:
一个称为的覆盖网络ingress,用于处理与群体服务有关的控制和数据流量。创建群集服务并且不将其连接到用户定义的覆盖网络时,ingress 默认情况下它将连接到网络。
一个名为的桥接网络docker_gwbridge,它将各个Docker守护程序连接到该集群中的其他守护程序。
您可以overlay使用来创建用户定义的网络docker network create,就像创建用户定义的bridge网络一样。服务或容器可以一次连接到多个网络。服务或容器只能在它们各自连接的网络之间进行通信。
尽管您可以将群集服务和独立容器都连接到覆盖网络,但是默认行为和配置问题有所不同。因此,本主题的其余部分分为适用于所有覆盖网络的操作,适用于群集服务网络的操作以及适用于独立容器使用的覆盖网络的操作。
创建覆盖网络
使用覆盖网络的Docker守护程序的防火墙规则
您需要打开以下端口,以往返于参与覆盖网络的每个Docker主机的流量:
用于群集管理通信的TCP端口2377
TCP和UDP端口7946,用于节点之间的通信
UDP端口4789,用于覆盖网络流量
在创建覆盖网络之前,您需要使用初始化Docker守护进程为swarm管理器,docker swarm init或者使用将该Docker守护进程加入现有的swarm docker swarm join。这两个都将创建默认的ingress覆盖网络,默认情况下,群集服务会使用该 覆盖网络。即使您从未计划使用群体服务,也需要这样做。之后,您可以创建其他用户定义的覆盖网络。
要创建用于群服务的覆盖网络,请使用如下命令:
$ docker network create -d overlay my-overlay
要创建覆盖网络,群集服务或 独立容器可以使用该覆盖网络来与在其他Docker守护程序上运行的其他独立容器进行通信,请添加以下--attachable标志:
$ docker network create -d overlay --attachable my-attachable-overlay
您可以指定IP地址范围,子网,网关和其他选项。