原文发表于cu:2016-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功能与分布式功能。

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

一.前置条件

1. 拓扑图

2. 环境说明

  1. Host1/2为VMware ESXi中的vm host,安装CentOS-7-x86_64-1511系统;
  2. 在宿主机Host1/2上各创建两个Container,为Container创建eth1端口;
  3. Container的eth1端口连接到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

多主机Docker容器的VLAN划分相关推荐

  1. 单主机Docker容器VLAN划分

    2 单主机Docker容器VLAN划分 pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分.下面,就来简单 ...

  2. 宿主机docker容器互传文件命令

    docker ps查看运行中的docker容器id 最前面这一列container id就是了,真实的id比这个要长,但使用这个短的就行了,也是唯一的. docker容器往宿主机传文件 docker ...

  3. 6 实现多主机间 Docker 容器通信

    目录 1 iptables简介 1.1 基本操作指令 1.2 iptables 工作流程 2 实现多主机间Docker容器通信 2.1 目标 2.2 操作步骤总结 2.3 具体操作步骤 1 iptab ...

  4. docker容器的跨主机访问

    在同一宿主机下的Docker的容器之间是默认互相联通的.通过docker inspect id或name可以查看到ip地址.在不同的容器中来执行ping是可以ping通的,然而跨容器则行不通,于是总结 ...

  5. Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

    Docker原生网络.自定义网络.Docker容器通信.跨主机容器网络 Docker原生网络 bridge Host none Docker自定义网络 自定义bridge overlay macvia ...

  6. docker容器4:docker网络类型+跨主机访问

    文章目录 一.网络类型介绍 1.查看支持网络类型 2.测试使用种类网络类型 3.网络类型设置 3.1 bridge 3.2 host 3.3 none 3.4创建自定义网络 4.Docker跨主机网络 ...

  7. docker 主机ip_docker容器指定ip

    docker容器指定ip 1,docker下的网络模式概览 docker安装后,会默认三种网络类型.(bridge,none,host) 查看dockers的网络类型 docker network l ...

  8. 解决Docker容器内访问宿主机MySQL数据库服务器的问题

    解决Docker容器内访问宿主机MySQL数据库服务器的问题 参考文章: (1)解决Docker容器内访问宿主机MySQL数据库服务器的问题 (2)https://www.cnblogs.com/ga ...

  9. 如何在Docker容器中挂载主机目录

    本文翻译自:How to mount a host directory in a Docker container I am trying to mount a host directory into ...

最新文章

  1. angr学习笔记(3)
  2. [asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?
  3. python assert 与 slice
  4. 基础编程题之最近公共祖先
  5. Byval 和 ByRef 使用
  6. linux dev input使用消失_Linux驱动04 | 启动分析之根文件系统
  7. focal loss dice loss源码_扒源码:sharding loss in Pytorch
  8. sf上的SIMD的程序库
  9. NS3使用Eclipse配置
  10. Golang中如何处理tcp粘包
  11. week15-字符串
  12. asp.net 视频教程
  13. 运行 skimage 报错ImportError: DLL load failed:找不到指定模块
  14. 人脸识别签到实习第三天
  15. Java 开源中文分词器Ansj 学习教程
  16. linux系统调用创建无名管道,linux 无名管道pipe和有名管道FIFO
  17. 34个最新的营销失败案例分析
  18. 网站优化推广-SEO诊断
  19. Emoji处理方式大起底
  20. php 根据银行卡号获取所属银行

热门文章

  1. python的urllib2模块
  2. Python 爬虫利器二之 Beautiful Soup 的用法
  3. dos下登录fedora下的vsftp失败
  4. React开发(228):ant design table根据宽度自动忽略
  5. 前端学习(3314):提取action
  6. react学习(60)--ant design中getFieldDecorator
  7. [css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?
  8. [css] 举例说明shape-outside的属性的用途有哪些?
  9. [css] 如何让背景图片固定不随滚动条滚动
  10. 前端学习(2561):页面更新