overlay网络简介
前面介绍过的host网络模式和bridge网络模式都是在单体的docker服务器上的容器间的网络通信。对于多个docker服务器上的多个容器间网络通信就需要使用到overlay网络模式了。
overlay网络常常用于docker swarm集群上的服务编排。当初始化docker swarm集群或者docker主机加入已存在的swarm集群时,会默认创建一个叫ingress的overlay网络和一个叫docker_gwbridge的bridge网络。其中docker_gwbridge的作用是将ingress跟宿主机的网络接口连接,这样才能将流量发送到swarm集群的每个节点上实现网络通信。
如果创建一个swarm集群的服务而没有自定义网络,那么会默认将服务连接到ingress的overlay网络上。建议每个swarm集群的服务都自定义overlay网络,这样可以实现不同的swarm集群服务间的网络隔离。
接下来说明overlay网络的使用,需要准备两台台已安装docker的服务器,一台初始化为manager节点,另一台加入swarm集群作为worker节点,可参考Docker系列之Docker Swarm容器管理与调度。
注: swarm集群需要用2377、7946、4798端口,配置防火墙的端口白名单或关闭防火墙。
使用overlay网络编排部署服务
使用swarm集群部署编排服务,其网络可以先创建好,而后在docker-compose.yml中配置引用。也可以直接在docker-compose.yml中定义,部署服务时会自动创建网络。
注: swarm集群管理的相关命令只能在manager节点运行。
自定义overlay网络:
$ docker network create -d overlay --subnet=10.11.0.0/16 my-overlay
定义一个overlay网络,名为my-overlay,网段为10.11.0.0/16。
查看网络列表:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
20706abe43b3 bridge bridge local
87e7be65d0ce docker_gwbridge bridge local
d2ad0895e4f3 host host local
3rrki5qjsbr4 ingress overlay swarm
qse9xsv76lbp my-overlay overlay swarm
8e5de9308b80 none null local
在manager节点可以看到新创建的my-overlay在列表中,如果此时直接在worker节点上执行docker network ls是看不到my-overlay网络的,当部署swarm集群服务并且引用my-overlay网络,将服务部署在worker节点上时,就可以看到my-overlay网络已创建。
下面以一个tomcat与redis的服务编排来验证