多主机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

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

转载于:https://www.cnblogs.com/netonline/p/7449827.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css p 文本不换行,超出文字显示省略号

.text {// 文本强制不换行white-space: nowrap;// 文本溢出显示省略号text-overflow: ellipsis;// 溢出的部分隐藏overflow: hidden; }

oracle监听无法启动常用解决办法

在cmd下使用lsnrctl start无法启动监听程序提示:TNS-12560: TNS: 协议适配器错误在cmd下进入lsnrctl,输入start提示:TNS-12557: Message 12557 not found; No message file for productNETWORK, facilityTNSns secondary err code: 12560请检…

mongodb 高级查询 统计记录条数

使用count()方法查询表中的记录条数,例如,下面的命令查询表users的记录数量: db.users.find().count();

SQL语句优化

【数据库优化的目的】 1.避免出现页面访问错误 由于数据库连接timeout产生页面5XX错误。 由于慢查询造成页面无法加载。 由于阻塞造成数据无法提交。 2.增加数据库的稳定性 很多数据库问题都是由于低效的查询引起的。 3.优化用户体验 流畅的访问速度。 良好的网站功能体验。 【…

ORA-27101 shared memory realm does not exist 错误处理

ORA-27101 错误处理 racle Database的主机被异常关机,重新启动电脑,Database报ORA-27101 shared memory realm does not exist 错误.可能是windows的oracle service 损坏,可以重建service试试是否可以修复。删除Service&#xff1…

js 获取 当天凌晨时间

需要进行时间比较的时候,一般会遇到从凌晨开始算 new Date(new Date().setHours(0, 0, 0, 0))

移动数据文件、控制文件、日志文件

1. ALTER DATABASE方法;-- 此方法要求关闭数据库-- 用此方法,可以移动任何表空间的数据文件。STEP 1. 下数据库:$ sqlplus /nologSQL> CONNECT INTERNAL;SQL> SHUTDOWN;SQL> EXIT;STEP 2.用操作系统命令移动数据文件:-- …

angular的性能分析 -随记

$watch 的实现原理和性能分析 只有双向绑定的 scope 才会被加入$watch队列,或者手动绑定$watch的$scope所有放在 $scope 中的变量或函数都被加入到了$watch队列当中,每次只要$scope中的一个变量的值发生变化,Angular就会自动调用$apply或者$d…

mongoose 联表、及联查询 使用populate

mongoose 中 使用 populate 进行多表联合查询 drawApply new Schema({salesId: { type: Schema.ObjectId, ref: sales },money: Number,status: { type: Number, default: 0 },createTime: { type: Date, default: Date.now } });sales new Schema({name: { type: String, r…

数据泵使用心得

数据泵在数据的导入、导出方面突出了它特有的优势,给数据库管理人员提供了极大的方便expdp导出数据 expdp常用参数介绍ATTACH 连接到现有作业, 例如 ATTACH [作业名]。COMPRESSION 减小有效的转储文件内容的大小关键字值为: (METADATA_ONLY) 和 NONE。CONTENT 指定要…

[2016-03-15]rabbitmq notes

安装 系统:CentOS 6 环境: rabbitmq 依赖的Erlang环境包 wget https://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm Server:rabbitmq-server安装包 wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.5.7/rabb…

mongoose 定义经纬度数据类型

本来想用Double在mongoose中直接定义经纬度的。但是发现mongoose的数据类型只有下面几种。 String Number Date Buffer Boolean Mixed ObjectId Array Decimal128 Map所以我们使用Decimal128来定义经纬度 const LocationsSchema new mongoose.Schema({latitude: {type: mong…

oracle导入中文数据出现乱码

两种情况下不会乱码1 数据库端的字符集和客户端一致2 数据库端的字符集包含(也可理解为:超集)客户端的字符集例如数据库端是 UTF-8 ,那么无论客户端是ZHS16GBK 还是Big5都可以存入,数据库端返回客户端时会做一次转换。…

VFP参考资料word版

《VFP参考资料word版》下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731452.html

腾讯地图 点聚合

首先,我有一万个理由,不想用腾讯地图,但只有一个理由说服我使用:做微信开发,地图组件需要和微信自带地图保持一致性。今天我做了腾讯地图很多marker点的聚合显示功能,主要参考官方的,下面是地址…