设为首页 收藏本站
查看: 1038|回复: 0

[经验分享] macvlan 网络结构分析

[复制链接]

尚未签到

发表于 2017-12-6 19:57:59 | 显示全部楼层 |阅读模式
  上一节我们创建了 macvlan 并部署了容器,本节详细分析 macvlan 底层网络结构。
macvlan 网络结构分析
  macvlan 不依赖 Linux bridge,brctl show 可以确认没有创建新的 bridge。
DSC0000.jpg

  查看一下容器 bbox1 的网络设备:
DSC0001.jpg

  除了 lo,容器只有一个 eth0,请注意 eth0 后面的 @if4,这表明该 interface 有一个对应的 interface,其全局的编号为 4。根据 macvlan 的原理,我们有理由猜测这个 interface 就是主机的 enp0s9,确认如下:
DSC0002.jpg

  可见,容器的 eth0 就是 enp0s9 通过 macvlan 虚拟出来的 interface。容器的 interface 直接与主机的网卡连接,这种方案使得容器无需通过 NAT 和端口映射就能与外网直接通信(只要有网关),在网络上与其他独立主机没有区别。当前网络结构如图所示:
DSC0003.jpg

用 sub-interface 实现多 macvlan 网络
  macvlan 会独占主机的网卡,也就是说一个网卡只能创建一个 macvlan 网络,否则会报错:
DSC0004.jpg

  但主机的网卡数量是有限的,如何支持更多的 macvlan 网络呢?
  好在 macvlan 不仅可以连接到 interface(如 enp0s9),也可以连接到 sub-interface(如 enp0s9.xxx)。
  VLAN 是现代网络常用的网络虚拟化技术,它可以将物理的二层网络划分成多达 4094 个逻辑网络,这些逻辑网络在二层上是隔离的,每个逻辑网络(即 VLAN)由 VLAN ID 区分,VLAN ID 的取值为 1-4094。
  Linux 的网卡也能支持 VLAN(apt-get install vlan),同一个 interface 可以收发多个 VLAN 的数据包,不过前提是要创建 VLAN 的 sub-interface。
  比如希望 enp0s9 同时支持 VLAN10 和 VLAN20,则需创建 sub-interface enp0s9.10 和 enp0s9.20。
  在交换机上,如果某个 port 只能收发单个 VLAN 的数据,该 port 为 Access 模式,如果支持多 VLAN,则为 Trunk 模式,所以接下来实验的前提是:
  enp0s9 要接在交换机的 trunk 口上。不过我们用的是 VirtualBox 虚拟机,则不需要额外配置了。
  如果大家想了解更多 Linux VLAN 实践,可参看 CloudMan 《每天5分钟玩转 OpenStack》中的相关章节。
  下面演示如何在 enp0s9.10 和 enp0s9.20 上创建 macvlan 网络。
  首先编辑 host1 和 host2 的 /etc/network/interfaces,配置 sub-
  auto enp0s9
  iface enp0s9 inet manual
  auto enp0s9.10
  iface enp0s9.10 inet manual
  vlan-raw-device enp0s9
  auto enp0s9.20
  iface enp0s9.20 inet manual
  vlan-raw-device enp0s9
  然后启用 sub-interface:
  ifup enp0s9.10
  ifup enp0s9.20
  
创建 macvlan 网络:
  docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=enp0s9.10 mac_net10
  docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=enp0s9.20 mac_net20
  
在 host1 中运行容器:
  docker run -itd --name bbox1 --ip=172.16.10.10 --network mac_net10 busybox
  docker run -itd --name bbox2 --ip=172.16.20.10 --network mac_net20 busybox
  
在 host2 中运行容器:

  docker run -itd --name bbox3 --ip=172.16.10.11 --network mac_net10 busybox
  docker run -itd --name bbox4 --ip=172.16.20.11 --network mac_net20 busybox
  
当前网络结构如图所示:
DSC0005.png

  这四个容器之间的连通性如何?下一节我们将详细讨论 macvlan 网络的连通和隔离特性。

DSC0006.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421444-1-1.html 上篇帖子: ubuntu16.04 docker安装 下篇帖子: 如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表