使用Macvlan网络

某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络。在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口,用于Macvlan,以及Macvlan的子网和网关。您甚至可以使用不同的物理网络接口隔离Macvlan网络。请记住以下事项:

  • 由于IP地址耗尽或“VLAN传播”,很容易无意中损坏您的网络,在这种情况下,您的网络中有大量不同的唯一MAC地址。
  • 您的网络设备需要能够处理“混杂模式”,其中一个物理接口可以分配多个MAC地址。
  • 如果您的应用程序可以使用桥接器(在单个Docker主机上)或覆盖层(跨多个Docker主机进行通信),那么从长远来看,这些解决方案可能会更好。

创建一个macvlan网络

创建Macvlan网络时,它可以处于桥接模式或802.1q干线桥接模式。

  • 在桥接模式下,Macvlan流量通过主机上的物理设备。

  • 在802.1q中继桥接模式下,流量通过Docker在运行中创建的802.1q子接口。这使您可以在更细粒度的级别上控制路由和筛选。

桥接模式

要创建与给定物理网络接口桥接的Macvlan网络,请使用--driver macvlandocker network create命令。您还需要指定parent,这是流量将在Docker主机上实际通过的接口。 网络名称是pub_net

[root@docker11 ~]# docker network create -d macvlan --subnet=172.16.86.0/ --gateway=172.16.86.1 -o parent=eth0 pub_net
7479d90651e92d8971916e678dceaad5c6deb845b7af30802b028afa022c98d0

如果您需要排除在Macvlan网络中使用的IP地址,例如当已使用给定的IP地址时,请使用--aux-addresses

$ docker network create -d macvlan  \
--subnet=192.168.32.0/ \
--ip-range=192.168.32.128/ \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32

192.168.32.128/25      意思就是地址范围从 192.168.32.128   255.255.255.128   网络名称是macnet32

802.1q中继桥接模式

如果指定parent包含点的接口名称,例如eth0.50,Docker将其解释为子接口eth0并自动创建子接口。

[root@docker11 ~]# docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--gateway=192.168.50.1 \
-o parent=eth0. macvlan50
cd6369cc9f81ca163f1fcd6b7f36db61276f0f750133e0f8812ce56697874cdc

使用ipvlan而不是macvlan

在上面的示例中,您仍在使用L3网桥。您可以使用ipvlan ,然后获得L2桥接。指定-o ipvlan_mode=l2。 需要内核版本4.0或以上

$ docker network create -d ipvlan \
--subnet=192.168.210.0/ \
--subnet=192.168.212.0/ \
--gateway=192.168.210.254 \
--gateway=192.168.212.254 \
-o ipvlan_mode=l2 ipvlan210

使用IPv6

如果已将Docker守护程序配置为允许IPv6,则可以使用双栈IPv4 / IPv6 Macvlan网络。

[root@docker11 ~]# docker network create -d macvlan \
> --subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
> --gateway=192.168.216.1 --gateway=192.168.218.1 \
> --subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
> -o parent=eth0.218 \
> -o macvlan_mode=bridge macvlan216
65a2dc885f5dd2778089ba636a2dc1050331a4f83f2b2ff3f509e6df5b348a3d

使用macvlan网络进行联网

本系列教程涉及连接到macvlan网络的网络独立容器。在这种类型的网络中,Docker主机在其IP地址接受对多个MAC地址的请求,并将这些请求路由到适当的容器。有关其他网络主题,请参阅 概述

目标

这些教程的目标是设置桥接macvlan网络并将容器连接到该网络,然后设置802.1q集群macvlan网络并为其附加容器。

先决条件

  • 大多数云提供商阻止macvlan网络。您可能需要物理访问您的网络设备。

  • macvlan网络驱动程序仅适用于Linux主机和Windows,或Windows Server  dockerEE,不支持Mac的docker,。

  • 您至少需要Linux内核版本3.9,建议使用4.0或更高版本。

  • 这些示例假设您的以太网接口是eth0。如果您的设备具有不同的名称,请改用它。

bridge的例子

在简单的网桥示例中,您的流量通过eth0,Docker使用其MAC地址将流量路由到您的容器。要联网网络上的设备,您的容器似乎已物理连接到网络。

  1. 创建一个macvlan名为的网络my-macvlan-net。将subnet,, gatewayparent值修改为在您的环境中有意义的值。

[root@benjamincloud ~]# docker network create -d macvlan \
> --subnet=172.16.86.0/ \
> --gateway=172.16.86.1 \
> -o parent=eth0 \
> my-macvlan-net
eae982543504a4951eeaad53f31c1c6442cde5844385e80600bf619be340f091

您可以使用docker network lsdocker network inspect pub_net 命令来验证网络是否存在且是否为macvlan网络。

2.启动alpine容器并将其连接到my-macvlan-net网络。该 -dit标志在后台启动容器。该--rm标志表示容器在停止时被移除

[root@benjamincloud ~]# docker run --rm -itd --network my-macvlan-net --name my-macvlan-alpine alpine:latest ash

3.检查my-macvlan-alpine容器并注意MacAddress密钥中的Networks密钥:

4.通过运行几个docker exec命令,查看容器如何看到自己的网络接口。

[root@benjamincloud ~]# docker exec my-macvlan-alpine ip addr show eth0
: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu qdisc noqueue state UNKNOWN
link/ether ::ac::: brd ff:ff:ff:ff:ff:ff
inet 172.16.86.2/ brd 172.16.86.255 scope global eth0
valid_lft forever preferred_lft forever
[root@benjamincloud ~]# docker exec my-macvlan-alpine ip  route
default via 172.16.86.1 dev eth0
172.16.86.0/ dev eth0 scope link src 172.16.86.2

5.停止容器(Docker因--rm标志而删除它),然后删除网络。

[root@benjamincloud ~]# docker network rm my-macvlan-net
my-macvlan-net

802.1q集群桥示例

在802.1q中继网桥示例中,您的流量通过eth0(被叫eth0.10)子接口流动,Docker使用其MAC地址将流量路由到您的容器。要联网网络上的设备,您的容器似乎已物理连接到网络。

  1. 创建一个macvlan名为的网络my-8021q-macvlan-net。将subnet,, gatewayparent值修改为 在您的环境中有意义的值。

[root@benjamincloud ~]# docker network create -d macvlan --subnet 172.16.86.0/ --gateway 172.16.86.1 -o parent=eth0. my-8021q-macvlan-net
0c3d8cfdfc34a00a40317cf0d9d8db32b29a9477cde24e6458c99a1a1592ec65

2.启动alpine容器并将其连接到my-8021q-macvlan-net 网络。该-dit标志在后台启动容器,但让你重视它。该--rm标志表示容器在停止时被移除。

[root@benjamincloud ~]# docker run --rm -itd \
> --network my-8021q-macvlan-net \
> --name my-second-macvlan-alpine \
> alpine:latest \
> ash
6971038a66ebf529072308d9160c7322e85d58c2c52956006f4f3dead502f594

3.检查my-second-macvlan-alpine容器并注意MacAddress 密钥中的Networks密钥:

4.通过运行几个docker exec命令,查看容器如何看到自己的网络接口。

5.停止容器(Docker因--rm标志而删除它),然后删除网络。

[root@benjamincloud ~]# docker stop my-second-macvlan-alpine
my-second-macvlan-alpine
[root@benjamincloud ~]# docker network rm my-8021q-macvlan-net
my-8021q-macvlan-net

docker从零开始网络(六)Macvlan的更多相关文章

  1. docker从零开始网络(一)概述

    概述 预计阅读时间: 4分钟 Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载.Docker容器和服务甚至不需要知道它们部署在Docker上,或 ...

  2. docker从零开始网络(四 ) host网络

    使用主机网络 如果host对容器使用网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离.例如,如果您运行绑定到端口80 host的容器并使用网络,则容器的应用程序将在主机IP地址的端口80上可 ...

  3. docker从零开始网络(二)桥接网络

    使用桥接网络 在网络方面,桥接网络是链路层设备,它在网络段之间转发流量.桥接网络可以是硬件设备或在主机内核中运行的软件设备. 就Docker而言,桥接网络使用软件桥接器,该软件桥接器允许连接到同一桥接 ...

  4. docker从零开始网络(七) 配置daemon和容器

    启用IPv6支持 在Docker容器或swarm服务中使用IPv6之前,需要在Docker守护程序中启用IPv6支持.之后,您可以选择将IPv4或IPv6(或两者)与任何容器,服务或网络一起使用. 注 ...

  5. docker从零开始网络(五)null网络

    禁用容器的网络连接 预计阅读时间: 1分钟 如果要完全禁用容器上的网络堆栈,可以--network none在启动容器时使用该标志.在容器内,仅创建环回设备.以下示例说明了这一点. 1.创建容器. [ ...

  6. docker从零开始网络(三) overly(覆盖)网络

    使用overly网络 该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络.该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信.Dock ...

  7. docker网络之macvlan

    macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作.macvlan有四种模式:VEPA,bridg ...

  8. Docker源码分析(六):Docker Daemon网络

    1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已然给云计算领域带来了新的发展模式.Docker借助容器技术彻底释放了轻量级虚拟化技术的威力,让容器的伸缩.应用的运行都变得前所未有的方 ...

  9. Docker学习(六): 网络使用与配置

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

随机推荐

  1. webmagic 二次开发爬虫 爬取网站图片

    webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. webmagic介绍 编写一个简单的爬虫 webmagic的使用文档:http://w ...

  2. CSS position属性---absolute与relative

    详情请点击此链接 http://www.cnblogs.com/polk6/archive/2013/07/26/3214847.html

  3. scrapy使用记录

    1 进入pip安装目录 python -m pip install --upgrade pip pip install Scrapy 2. 创建一个项目 scrapy startproject tes ...

  4. 关于php网络爬虫phpspider

    前几天,被老板拉去说要我去抓取大众点评某家店的数据,当然被我义正言辞的拒绝了,理由是我不会...但我的反抗并没有什么卵用,所以还是乖乖去查资料,因为我是从事php工作的,首先找的就是php的网络爬虫源 ...

  5. http请求整理

    终于又回来了,先来简单整理一波http请求的信息.对于前端来说,不管是在面试还是在实际项目中,都有必要去了解一些关于http的信息. http请求包含三部分:请求行request line.请求头re ...

  6. 洛谷P4593 [TJOI2018]教科书般的亵渎 【数学】

    题目链接 洛谷P4593 题解 orz dalao upd:经典的自然数幂和,伯努利数裸题 由题我们只需模拟出代价,只需使用\(S(n,k) = \sum\limits_{i = 1}^{n} i^{ ...

  7. jsp电子商务 购物车实现之一 设计篇

    购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...

  8. 【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP

    先说一下斜率优化:这是一种经典的dp优化,是OI中利用数形结合的思想解决问题的典范,通常用于优化dp,有时候其他的一些决策优化也会用到,看待他的角度一般有两种,但均将决策看为二维坐标系上的点,并转化为 ...

  9. 线程--promise furture 同步

    http://www.cnblogs.com/haippy/p/3279565.html std::promise 类介绍 promise 对象可以保存某一类型 T 的值,该值可被 future 对象 ...

  10. 使用babel把es6代码转成es5代码

    第一步:创建一个web项目 使用命令:npm init 这个命令的目的是生成package.json. 执行第二步中的命令后生成的package.json的文件的内容是: { "name&q ...