• 多主机Docker容器的VLAN划分


    原文发表于cu2016-06-06

    参考文档:

    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功能与分布式功能。

    本文主要验证利用ovsvlan功能实现跨主机的容器隔离与通信。 

    一.前置条件 

    1. 拓扑图

    2. 环境说明 

      1. Host1/2VMware ESXi中的vm host,安装CentOS-7-x86_64-1511系统;
      2. 在宿主机Host1/2上各创建两个Container,为Container创建eth1端口;
      3. Containereth1端口连接到ovs网桥,ovs网桥对接container的端口分别划分到vlan10/20
      4. 宿主机Host1/2的网卡ens192分别桥接到各宿主机内部的 ovs网桥;
      5. 宿主机Host1/2的网卡ens192需要设置成混杂模式,并且对接的交换机端口设置为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地址时,丢弃所有入站数据。 

    3. 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/ 

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

    以下操作没有特别说明,都表示在Host1上操作,Host2按照Host1操作微调即可。 

    1. 启动容器

    #在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

     

    2. 为容器配置网络

    #用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

     

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

    #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

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

  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/netonline/p/7449827.html
Copyright © 2020-2023  润新知