overlay 网络模式

Overlay是在传统网络上虚拟出一个虚拟网络来,传统网络不需要在做任何适配,这样物理层网络只对应物理层的计算(物理机、虚拟化层管理网),虚拟的网络只对应虚拟计算。

Overlay的技术路线,其实是从架构上对数据中心的建设模式进行了颠覆,对物理设备的要求降至最低,业务完全定义在层叠网络上。那么,这是否意味着将来数据中心使用Overlay网络不需要硬件支持而只需要软件定义就足够了呢?答案无疑是否定的。

Overlay 在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于IP的基础网络技术为主。Overlay 技术是在现有的物理网络之上构建一个虚拟网络,上层应用只与虚拟网络相关。一个Overlay网络主要由三部分组成:

边缘设备:是指与虚拟机直接相连的设备
控制平面:主要负责虚拟隧道的建立维护以及主机可达性信息的通告
转发平面:承载 Overlay 报文的物理网络

overlay network

overlay1.png

容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信,如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.9.3这个ip地址,在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。

在docker容器里面overlay 是怎么实现的呢?

我们会有一个服务发现,比如说是consul,会定义一个ip地址池,比如10.0.9.0/24之类的,上面会有容器,容器的ip地址会从上面去获取,获取完了后,会通过eth1进行通信,贼这实现跨主机的东西。

overlay2.png

需要创建一个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都需要修改

示例

两台主机

overlay3.png

overlay4.png

通过这个网卡出去

overlay5.png

修改它的启动参数,这里的ip等要修改成自己的。

overlay6.png

第二个服务器也一样

overlay7.png

修改完后,需要重启。

overlay8.png

查看重启后是否启动成功

overlay9.png

这边也一样

overlay10.png

在第一台主机上创建一个consul

overlay11.png

查看启动是否成功

overlay12.png

创建完后通过浏览器访问一下,可以看到这两台会自动注册上来,这样的话这两个主机之间就会进行通信。

overlay13.png

 

overlay网络模式实战


Create overlay network

docker network create -d overlay --subnet=10.0.9.0/24 edu-net

-d确定我们这个overlay 使用的是哪个驱动

Subnet:是子网定义一个网段

edu-net:网络名称

示例

在第一台机器上查看有哪些网络,可以看到没有overlay网络。

overlay1.png

在第二台机器上查看有哪些网络,可以看到也没有overlay网络。

overlay2.png

在第一台主机上创建一下

overlay3.png

这边自动回进行通步,因为使用的是同一个服务器发件。

overlay4.png


containers use overlay network

hostA

docker run -d --name app1 --net=edu-net reg.maiziedu.com:5000/nginx:1.11.1

创建一个容器

overlay5.png

创建成功

overlay6.png

登录进去,ip地址为9.2。

overlay7.png

它也具备一个nat网络模式。

overlay8.png


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这个网络。

overlay9.png

登录进去,可以看到这台容器的ip是9.3。

overlay10.png

怎么去验证这两条容器是不是通的呢?

test overlay network:

overlay11.png

在A主机上的容器可以直接通,也可以ping域名。

overlay12.png

在B主机上的容器可以直接通,我们这里实现了跨主机通信,是通过overlay network这种网络模式进行通信的。

overlay13.png

 

来源: http://www.maiziedu.com/wiki/cloud/overlayact/