Overlay是在传统网络上虚拟出一个虚拟网络来,传统网络不需要在做任何适配,这样物理层网络只对应物理层的计算(物理机、虚拟化层管理网),虚拟的网络只对应虚拟计算。
Overlay的技术路线,其实是从架构上对数据中心的建设模式进行了颠覆,对物理设备的要求降至最低,业务完全定义在层叠网络上。那么,这是否意味着将来数据中心使用Overlay网络不需要硬件支持而只需要软件定义就足够了呢?答案无疑是否定的。
Overlay 在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于IP的基础网络技术为主。Overlay 技术是在现有的物理网络之上构建一个虚拟网络,上层应用只与虚拟网络相关。一个Overlay网络主要由三部分组成:
边缘设备:是指与虚拟机直接相连的设备
控制平面:主要负责虚拟隧道的建立维护以及主机可达性信息的通告
转发平面:承载 Overlay 报文的物理网络
overlay network
容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信,如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.9.3这个ip地址,在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。
在docker容器里面overlay 是怎么实现的呢?
我们会有一个服务发现,比如说是consul,会定义一个ip地址池,比如10.0.9.0/24之类的,上面会有容器,容器的ip地址会从上面去获取,获取完了后,会通过eth1进行通信,贼这实现跨主机的东西。
需要创建一个consul的服务容器
docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul progrium/consul -server -bootstrap -ui-dir /ui
修改它的启动参数
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.59.100:8500 --cluster-advertise=enp0s8:2376 --insecure-registry=0.0.0.0/0
hostA和hostB都需要修改
示例
两台主机
通过这个网卡出去
修改它的启动参数,这里的ip等要修改成自己的。
第二个服务器也一样
修改完后,需要重启。
查看重启后是否启动成功
这边也一样
在第一台主机上创建一个consul
查看启动是否成功
创建完后通过浏览器访问一下,可以看到这两台会自动注册上来,这样的话这两个主机之间就会进行通信。
overlay网络模式实战
Create overlay network
docker network create -d overlay --subnet=10.0.9.0/24 edu-net
-d确定我们这个overlay 使用的是哪个驱动
Subnet:是子网定义一个网段
edu-net:网络名称
示例
在第一台机器上查看有哪些网络,可以看到没有overlay网络。
在第二台机器上查看有哪些网络,可以看到也没有overlay网络。
在第一台主机上创建一下
这边自动回进行通步,因为使用的是同一个服务器发件。
containers use overlay network
hostA
docker run -d --name app1 --net=edu-net reg.maiziedu.com:5000/nginx:1.11.1
创建一个容器
创建成功
登录进去,ip地址为9.2。
它也具备一个nat网络模式。
containers use overlay network
hostB
docker run -d --name app2 --net=edu-net reg.maiziedu.com:5000/nginx:1.11.1
示例
在hostB主机上也创建一个容器,叫app2,单也使用edu-net这个网络。
登录进去,可以看到这台容器的ip是9.3。
怎么去验证这两条容器是不是通的呢?
test overlay network:
在A主机上的容器可以直接通,也可以ping域名。
在B主机上的容器可以直接通,我们这里实现了跨主机通信,是通过overlay network这种网络模式进行通信的。
来源: http://www.maiziedu.com/wiki/cloud/overlayact/