Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356616
  • 博文数量: 34
  • 博客积分: 251
  • 博客等级: 二等列兵
  • 技术积分: 419
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-21 15:50
文章分类

全部博文(34)

文章存档

2017年(5)

2016年(19)

2012年(10)

我的朋友

分类: 虚拟化

2016-06-06 16:30:49

参考文档:

1.    Docker网络的4种模式,pipework/ovs的简单使用等:

2.    Dockerpool全文档:

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端口。

#网桥需要安装bridge-utils包;

#常规情况下,加入bridge网络的宿主机网卡自动进入promiscuous mode,并进入forwarding state (可以使用dmesg查看);但如果宿主机是vm,需要注意调整宿主机的网卡为promiscuous mode,对接虚拟网桥的端口为trunk端口。如VMware ESXi默认拒绝接受混杂模式下的数据包并且不对数据包打tag

3.  pipework

pipework本质是一个shell脚本实现,相对docker自身比较薄弱的网络配置处理方式,其可以方便地对docker网络进行配置。

点击(此处)折叠或打开

  1. [root@localhost ~]# cd /usr/local/
  2. [root@localhost local]# git clone https://github.com/jpetazzo/pipework
  3. [root@localhost local]# ln -s /usr/local/pipework/pipework /usr/local/bin/

#可以使用软连接,复制,或增加环境变量的多种方式将pipework设为可执行命令。

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

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

1.  启动容器

Host1/2下启动容器test1/2/3/4

点击(此处)折叠或打开

  1. [root@localhost ~]# docker run -itd --net=none --name test1 centoswithssh
  2. [root@localhost ~]# docker run -itd --net=none --name test2 centoswithssh
  3. [root@localhost ~]# docker ps

#"--net=none"设置容器启动不带网络,由后期自定义,关于容器网络的模式请参考链接文档1

2.  为容器配置网络

点击(此处)折叠或打开

  1. [root@localhost ~]# pipework ovs0 test1 192.168.1.11/24 @10
  2. [root@localhost ~]# pipework ovs0 test2 192.168.1.12/24 @20
  3. [root@localhost ~]# ovs-vsctl show
  4. [root@localhost ~]# docker exec -it test1 ifconfig


#pipework添加ovs0网桥,test1网络划分到vlan10test2网络划分到vlan20

#pipework本质是采用shell脚本简化了ovs的操作,pipeworkovs的具体操作请参考链接文档3

#这里并没有为ovs0网桥设置管理ip,可以根据需要设置,请参考链接1

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

点击(此处)折叠或打开

  1. [root@localhost ~]# ovs-vsctl add-port ovs0 ens192
  2. [root@localhost ~]# ovs-vsctl show

#Host1Host2中的容器需要通信,需要把两边的网络打通,即将宿主机网卡添加到虚拟网桥中。

4.  验证

点击(此处)折叠或打开

  1. [root@localhost ~]# docker exec -it test1 ping 192.168.1.12
  2. [root@localhost ~]# docker exec -it test1 ping 192.168.1.13
  3. [root@localhost ~]# docker exec -it test1 ping 192.168.1.14
  4. [root@localhost ~]# docker exec -it test2 ping 192.168.1.13
  5. [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

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

阅读(3433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~