多主机Docker容器的VLAN划分

原稿刊载于cu:201陆-06-06

 ovs相对linux自己的brctl工具(yum install -y bridge-utils)功用上添加广大,如vlan功效与分布式效率。

参照文书档案:

本文首要表达利用ovs的vlan作用完毕跨主机的容器隔开分离与通讯。 

  1. Docker互连网的4种格局,pipework/ovs的简易利用等:http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice
  2. Dockerpool全文档:https://yeasy.gitbooks.io/docker\_practice/content/index.html
  3. Ovs完全使用手册:http://my.oschina.net/tantexian/blog/648965?fromerr=C7Pp6sMs

一.内置条件 

 ovs相对linux本人的brctl工具(yum install -y bridge-utils)效用上丰裕广大,如vlan效能与分布式功效。

1. 拓扑图

图片 1

正文主要表达利用ovs的vlan功效完成跨主机的器皿隔断与通讯。 

贰. 条件表达 

  1. Host1/2为VMware ESXi中的vm host,安装CentOS-7-x86_64-1511系统;
  2. 在宿主机Host一半上各创制八个Container,为Container创设eth一端口;
  3. Container的eth一端口连接到ovs网桥,ovs网桥对接container的端口分别划分到vlan十/20;
  4. 宿主机Host二分一的网卡ens1九贰各自桥接到各宿主机内部的 ovs网桥;
  5. 宿主机Host八分之四的网卡ens1九二索要设置成混杂格局,并且连接的交流机端口设置为trunk端口。

  6. 网桥须要安装bridge-utils包;

  7. 日常状态下,到场bridge网络的宿主机网卡自动进入promiscuous
    mode
    ,并进入forwarding
    state
    (能够利用dmesg查看);但借使宿主机是vm,需求专注调整宿主机的网卡为promiscuous mode,调整”伪传输”形式为”接受”,对接虚拟网桥的端口为trunk端口。如VMware ESXi暗中同意拒绝接受混杂形式下的数据包并且不对数据包打tag;伪传输”格局暗中认可为”拒绝”表示出站数据的源mac地址区别于.vmx文件中的源mac地址时,vswitch会扬弃该出站多少;”mac地址变更”方式暗许为”拒绝”表示vm在操作系统层面将网卡的mac地址变更为不一样于.vmx配置文件中的mac地址时,甩掉全部入站数据。 

1.松开条件 

3. pipework 

图片 2

#pipework本质是一个shell脚本实现,相对docker自身比较薄弱的网络配置处理方式,其可以方便地对docker网络进行配置。
[root@localhost ~]# cd /usr/local/
[root@localhost local]# git clone https://github.com/jpetazzo/pipework

#可以使用软连接,复制,或增加环境变量的多种方式将pipework设为可执行命令
[root@localhost local]# ln -s /usr/local/pipework/pipework /usr/local/bin/ 

图片 3

1. 拓扑图

图片 4

一.多主机Docker容器的vlan划分

以下操作未有特意表明,都意味在Host1上操作,Host2遵照Host1操作微调即可。 

2. 环境表达 

  1. Host1/2为VMware ESXi中的vm host,安装CentOS-7-x86_64-1511系统;
  2. 在宿主机Host贰分之一上各成立七个Container,为Container制造eth一端口;
  3. Container的eth1端口连接到ovs网桥,ovs网桥对接container的端口分别划分到vlan十/20;
  4. 宿主机Host4/8的网卡ens1玖贰分头桥接到各宿主机内部的 ovs网桥;
  5. 宿主机Host50%的网卡ens1玖2急需设置成混杂方式,并且连接的交流机端口设置为trunk端口。

  6. 网桥需求设置bridge-utils包;

  7. 常规状态下,出席bridge网络的宿主机网卡自动进入promiscuous
    mode
    ,并进入forwarding
    state
    (能够行使dmesg查看);但若是宿主机是vm,需求小心调整宿主机的网卡为promiscuous mode,调整”伪传输”形式为”接受”,对接虚拟网桥的端口为trunk端口。如VMware ESXi暗中认可拒绝接受混杂格局下的数据包并且不对数据包打tag;伪传输”情势默许为”拒绝”表示出站数据的源mac地址差异于.vmx文件中的源mac地址时,vswitch会甩掉该出站数码;”mac地址变更”格局暗中认可为”拒绝”表示vm在操作系统层面将网卡的mac地址变更为分裂于.vmx配置文件中的mac地址时,吐弃全数入站数据。 

  8. pipework 


#pipework本质是一个shell脚本实现,相对docker自身比较薄弱的网络配置处理方式,其可以方便地对docker网络进行配置。
[root@localhost ~]# cd /usr/local/
[root@localhost local]# git clone https://github.com/jpetazzo/pipework

#可以使用软连接,复制,或增加环境变量的多种方式将pipework设为可执行命令
[root@localhost local]# ln -s /usr/local/pipework/pipework /usr/local/bin/ 

一. 起动容器

#在Host1/2下启动容器test1/2/3/4;
#"--net=none"设置容器启动不带网络,由后期自定义,关于容器网络的模式请参考链接文档1
[root@localhost ~]# docker run -itd --net=none --name test1 centoswithssh
[root@localhost ~]# docker run -itd --net=none --name test2 centoswithssh
[root@localhost ~]# docker ps

图片 5 

一.多主机Docker容器的vlan划分

以下操作未有专门表明,都表示在Host壹上操作,Host二依照Host一操作微调即可。 

二. 为容器配置网络

图片 6

#用pipework添加ovs0网桥,test1网络划分到vlan10,test2网络划分到vlan20;
#pipework本质是采用shell脚本简化了ovs的操作,pipework及ovs的具体操作请参考链接文档3;
#这里并没有为ovs0网桥设置管理ip,可以根据需要设置,请参考链接1。
[root@localhost ~]# pipework ovs0 test1 192.168.1.11/24 @10
[root@localhost ~]# pipework ovs0 test2 192.168.1.12/24 @20

[root@localhost ~]# ovs-vsctl show
[root@localhost ~]# docker exec -it test1 ifconfig

图片 7

图片 8

图片 9 

一. 初步容器

#在Host1/2下启动容器test1/2/3/4;
#"--net=none"设置容器启动不带网络,由后期自定义,关于容器网络的模式请参考链接文档1
[root@localhost ~]# docker run -itd --net=none --name test1 centoswithssh
[root@localhost ~]# docker run -itd --net=none --name test2 centoswithssh
[root@localhost ~]# docker ps

图片 10 

3. 为网桥添加宿主机网卡

#Host1与Host2中的容器需要通信,需要把两边的网络打通,即将宿主机网卡添加到虚拟网桥中
[root@localhost ~]# ovs-vsctl add-port ovs0 ens192
[root@localhost ~]# ovs-vsctl show

二. 为容器配置互联网

#用pipework添加ovs0网桥,test1网络划分到vlan10,test2网络划分到vlan20;
#pipework本质是采用shell脚本简化了ovs的操作,pipework及ovs的具体操作请参考链接文档3;
#这里并没有为ovs0网桥设置管理ip,可以根据需要设置,请参考链接1。
[root@localhost ~]# pipework ovs0 test1 192.168.1.11/24 @10
[root@localhost ~]# pipework ovs0 test2 192.168.1.12/24 @20

[root@localhost ~]# ovs-vsctl show
[root@localhost ~]# docker exec -it test1 ifconfig

图片 11

图片 12 

4. 验证

[root@localhost ~]# docker exec -it test1 ping 192.168.1.12
[root@localhost ~]# docker exec -it test1 ping 192.168.1.13
[root@localhost ~]# docker exec -it test1 ping 192.168.1.14
[root@localhost ~]# docker exec -it test2 ping 192.168.1.13
[root@localhost ~]# docker exec -it test2 ping 192.168.1.14

预期:

  1. test1 ping
    test2: fail
  2. test1 ping
    test3: success
  3. test1 ping
    test4: fail
  4. test2 ping
    test3: fail
  5. test2 ping
    test4: success

根据表明结果显示,结果符合预期,请见截图:

图片 13

图片 14

正文永久更新链接地址http://www.linuxidc.com/Linux/2017-09/146770.htm

图片 15

三. 为网桥添加宿主机网卡

#Host1与Host2中的容器需要通信,需要把两边的网络打通,即将宿主机网卡添加到虚拟网桥中
[root@localhost ~]# ovs-vsctl add-port ovs0 ens192
[root@localhost ~]# ovs-vsctl show

4. 验证

[root@localhost ~]# docker exec -it test1 ping 192.168.1.12
[root@localhost ~]# docker exec -it test1 ping 192.168.1.13
[root@localhost ~]# docker exec -it test1 ping 192.168.1.14
[root@localhost ~]# docker exec -it test2 ping 192.168.1.13
[root@localhost ~]# docker exec -it test2 ping 192.168.1.14

预期:

  1. test1 ping test2:
    fail
  2. test1 ping test3:
    success
  3. test1 ping test4:
    fail
  4. test2 ping test3:
    fail
  5. test2 ping test4:
    success

据他们说表明结果展现,结果符合预期,请见截图:

图片 16

图片 17