码迷,mamicode.com
首页 > 系统相关 > 详细

centos7下安装docker(15.3跨主机网络-macvlan)

时间:2017-11-08 19:49:43      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:vlan   不同   用户   选项   容器   其他   drive   image   nat   

除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlan

macvlan本身是linu kernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多个interface,每个interface可以配置自己的ip。macvlan本身是一种网卡虚拟化技术,Docker用macvlan实现容器网络就不奇怪了

 

macvlan最大的优点是性能极好,相比其他方案,macvlan不需要创建Linux bridge,而是直接通过以太interface连接到物理网络

 

准备实验环境:

我们会使用docker1和docker2上单独的网卡ens192和ens160创建macvlan。为保证多个MAC地址网络包都可以从ens190或者ens160通过,我们需要打开网卡的混杂模式

技术分享

 

因为docker1号docker2是虚拟机,所以在网卡配置选项中设置混杂模式

技术分享

当前试验环境如下:盗图

技术分享

 

 

 

创建macvlan网络

docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

技术分享

 

注:macvlan网络是local网络,为了保证跨主机能够通信,用户需要自己管理IP subnet

      与其他网络不同,docker 不会为macvlan网络创建网关,这里的网关应该是真实存在的,否则路由无法通

     -o parent指定使用的网络interface

在docker2中也要执行相同的命令:docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

 

 

在docker1中运行容器

docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

技术分享

在docker2中执行同样的操作:

技术分享

验证docker1上的mac1与docker2上的mac2的连通性

技术分享

两个不同主机之间的容器可以相互ping通,但是不能解析容器的主机名,可见docker没有为macvlan提供dns服务,这点与overlay是不同的

注:macvlan是物理中实实在在存在的网络,macvlan实际就是我们常用的网卡的子接口,类似于:eth0:1

 

 

macvlan网络结构分析:

macvlan不依赖linux bridge,brctl show可以确认macvlan没有创建新的bridge

查看一下容器mac1的网络设备:

技术分享

除了lo,容器只有一个eth0,请注意:eth0后面还有@if2,表明该网卡有一个对应的interface,全局编号为2,。根据macvlan的原理,我们猜测这个interface就是ens192,

确认如下:技术分享

可见,容器的eth0就是ens192通过macvlan虚拟出来的interface。容器的interface直接与主机的网卡连接,这种方案是的容器无需通过NAT和端口映射就能与外网直接通信(只要有网关)在网络上与其他独立的主机没有区别

当前网络如图所示:

技术分享

 

centos7下安装docker(15.3跨主机网络-macvlan)

标签:vlan   不同   用户   选项   容器   其他   drive   image   nat   

原文地址:http://www.cnblogs.com/lkun/p/7805138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!