(译文)Macvlan vs Ipvlan

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(译文)Macvlan vs Ipvlan相关的知识,希望对你有一定的参考价值。

参考技术A

I’ve covered macvlans in the Bridge vs Macvlan post. If you are new to macvlan concept, go ahead and read it first.
在 Bridge vs Macvlan 一文中已经讲解了 macvlans 。如果对macvlan比较陌生,可以先阅读该文 Bridge vs Macvlan 。

To recap : Macvlan allows you to configure sub-interfaces (also termed slave devices) of a parent, physical Ethernet interface (also termed upper device), each with its own unique MAC address, and consequently its own IP address.
Macvlan可以在物理网卡构成的父接口(也叫做主接口)上添加子接口(也叫做从接口),每个子接口都拥有独立的MAC地址和IP 地址。
Applications, VMs and containers can then bind to a specific sub-interface to connect directly to the physical network, using their own MAC and IP address.
应用程序,虚拟机,容器通过绑定至子接口,拥有各自的MAC,IP,并连接到物理网络上。

Macvlan is a near-ideal solution to natively connect VMs and containers to a physical network, but it has its shortcomings:
Macvlan是一个近乎理想的连接虚拟机、容器至物理网络的方案,但它仍有如下不足之处:

Ipvlan is very similar to macvlan, with an important difference. Ipvlan does not assign unique MAC addresses to created sub-interfaces. All sub-interfaces share parent’s interface MAC address, but use distinct IP addresses.
Ipvlan与macvlan非常相似,但又存在显著不同。Ipvlan的子接口上并不拥有独立的MAC地址。所有共享父接口MAC地址的子接口拥有各自独立的IP。

Because all VMs or containers on a single parent interface use the same MAC address, ipvlan also has some shortcomings:
由于同一个父接口上连接的虚拟机和容器使用相同的MAC地址,ipvlan也存在如下局限:

Ipvlan has two modes of operation. Only one of the two modes can be selected on a single parent interface. All sub-interfaces operate in the selected mode.
Ipvlan有2种工作模式,同一个父接口上只能使用其中的一种,所有子接口根据父接口的工作模式运转。

Ipvlan L2 or Layer 2 mode is analogue to the macvlan bridge mode.
Ipvlan L2 模式与macvlan的bridge模式类似。

Parent interface acts as a switch between the sub-interfaces and the parent interface. All VMs or containers connected to the same parent Ipvlan interface and in the same subnet can communicate with each other directly through the parent interface. Traffic destined to other subnets is sent out through the parent interface to default gateway (a physical router). Ipvlan in L2 mode distributes broadcasts/multicasts to all sub-interfaces.
父接口充当父接口与子接口之间的交换机。同一父接口下相同子网的虚拟机和容器能够通过父接口直接进行通信。去往不同子网的流量将流出父接口发送至默认网关(物理路由器)。工作在L2模式下的Ipvlan会将广播包/组播包发送至所有子接口上。

Ipvlan L2 mode acts as a bridge or switch between the sub-interfaces and parent interface. As name suggests, Ipvlan L3 or Layer 3 mode acts as a Layer 3 device (router) between the sub-interfaces and parent interface.
工作在L2模式下的Ipvlan充当了父接口与子接口之间的交换机。以此类推。工作在L3模式下的Ipvlan充当父接口和子接口之间的三层设备(路由器)。

Ipvlan L3 mode routes the packets between all sub-interfaces, thus providing full Layer 3 connectivity. Each sub-interface has to be configured with a different subnet, i.e. you cannot configure 10.10.40.0/24 on both interfaces.
L3模式下的Ipvlan在子接口之间路由报文,提供3层网络之间的全连接。每个子接口都必须配置不同的子网网段。例如不可以在多个子接口上配置相同的10.10.40.0/24网段。

Broadcasts are limited to a Layer 2 domain, so they cannot pass from one sub-interface to another. Ipvlan L3 mode does not support multicast.
因为广播报文是二层域的,所以他们不能在子接口上相互传递。Ipvlan也不支持多播。

Ipvlan L3 mode does not support routing protocols, so it cannot notify the physical network router of the subnets it connects to. You need to configure static routes on the physical router pointing to the Host’s physical interface for all subnets on the sub-interfaces.
Ipvlan L3不支持路由协议,因此也无法将连接的子网网段通知物理网络上的路由器。需要人为在物理路由器上为子接口上的子网网段配置指向父接口IP的静态路由。

Ipvlan L3 can be used in conjunction with VM or Container ran BGP , used as a service advertisement protocol to advertise service availability into the network. This advanced scenario exceeds the purpose of this post.

Ipvlan与 运行BGP着虚拟机、容器 联合工作的话,可以在网络上注册服务。但这种高级场景不在本文的主题范围内

Macvlan and ipvlan cannot be used on the same parent interface at the same time.
同一个父接口上无法同时使用macvlan和ipvlan。

译自: https://hicu.be/macvlan-vs-ipvlan

Kubernetes网络自学系列 | Macvlan的救护员:IPvlan

素材来源:《Kubernetes网络权威指南》

一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes网络自学系列 | 汇总_COCOgsta的博客-CSDN博客


1.9 Macvlan的救护员:IPvlan

前文我们详细讨论了Macvlan,而且总结了Macvlan的一些局限性,也提到了IPvlan可以解决Macvlan的一些限制,因此本节将介绍IPvlan。

Macvlan和IPvlan虚拟网络模型提供的功能看起来差不多,那么,什么时候需要用到IPvlan呢?要回答这个问题,先来看看Macvlan先天存在的不足:

·无法支持大量的MAC地址;

·无法工作在无线网络环境中。

1.9.1 IPvlan简介

与Macvlan类似,IPvlan也是从一个主机接口虚拟出多个虚拟网络接口。区别在于IPvlan所有的虚拟接口都有相同的MAC地址,而IP地址却各不相同。因为所有的IPvlan虚拟接口共享MAC地址,所以特别需要注意DHCP使用的场景。DHCP分配IP地址的时候一般会用MAC地址作为机器的标识。因此,在使用Macvlan的情况下,客户端动态获取IP的时候需要配置唯一的Client ID,并且DHCP服务器也要使用该字段作为机器标识,而不是使用MAC地址。

Linux 内核3.19版本才开始支持IPvlan,Docker从4.2版本起能够稳定支持IPvlan。

IPvlan有两种不同的模式,分别是L2和L3。一个父接口只能选择其中一种模式,依附于它的所有子虚拟接口都运行在该模式下。

1.L2模式

IPvlan L2模式和Macvlan bridge模式的工作原理很相似,父接口作为交换机转发子接口的数据。同一个网络的子接口可以通过父接口转发数据,如果想发送到其他网络,则报文会通过父接口的路由转发出去。

2.L3模式

L3模式下,IPvlan有点像路由器的功能。如图1-30所示,IPvlan在各个虚拟网络和主机网络之间进行不同网络报文的路由转发工作。只要父接口相同,即使虚拟机/容器不在同一个网络,也可以互相ping通对方,因为IPvlan会在中间做报文的转发工作。

图1-30 IPvlan L3模式

L3模式下的虚拟接口不会接收多播或者广播的报文,原因是所有的网络都会发送给父接口,所有的ARP过程或者其他多播报文都是在底层的父接口完成的。需要注意的是,外部网络默认情况下是不知道IPvlan虚拟出来的网络的,如果不在外部路由器上配置好对应的路由规则,那么IPvlan的网络是不能被外部直接访问的。

1.9.2 测试IPvlan

先创建两个测试用的network namespace:

然后创建IPvlan的虚拟网卡接口,因为L2和Macvlan功能相同,所以这里测试L3模式。创建IPvlan虚拟接口的命令和Macvlan格式相同:

把IPvlan接口放到前面创建好的network namespace中:

给两个虚拟网卡接口配置不同网络IP地址,并配置好路由项:

最后测试两个网络的连通性:

1.9.3 Docker IPvlan网络

从Docker1.13版本开始加入了对IPvlan的支持,测试过程如下所示。

读者可以先阅读第2章,获得关于Docker的背景知识。

首先,创建IPvlan的网络,这需要在创建Docker网络时把网络驱动(-d)设置成ipvlan,同时设置IPvlan的工作模式为L3:

然后,启动两个容器,发现在同一个IPvlan网络的两个容器可以互相ping通:

再创建另外一个IPvlan网络,和前面的网络不在同一个广播域:

最后,在新建的网络中运行容器,发现可以ping通前面网络中的容器:

1.9.4 小结

我们将IPvlan称为Macvlan的“救护员”是因为IPvlan除了能够完美解决以上问题,还允许用户基于IPvlan搭建比较复杂的网络拓扑,不再基于Macvlan的简单的二层网络,而是能够与BGP(Boader Gateway Protocol,边界网关协议)等协议扩展我们的网络边界。

以上是关于(译文)Macvlan vs Ipvlan的主要内容,如果未能解决你的问题,请参考以下文章

译文容器网络模型:CNI+vs+CNM

译文async vs defer

docker网络之macvlan

docker网络 macvlan

第 8 章 容器网络 - 057 - macvlan 网络隔离和连通

Docker容器之macvlan网络