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