《Kubernetes网络权威指南》读书笔记 | 物理网卡的分身术:Macvlan

书籍来源:《Kubernetes网络权威指南:基础、原理与实践》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:《Kubernetes网络权威指南》读书笔记 | 汇总_COCOgsta的博客-CSDN博客


Macvlan支持容器之间使用宿主机所在网段资源。

1.8.1 Macvlan五大工作模式解析

Macvlan接口可以看作是物理以太网接口的虚拟子接口。使用Macvlan的效果是一块物理网卡上可以绑定多个IP地址,每个IP地址都有自己的MAC地址。

Macvlan的主要用途是网络虚拟化(包括容器和虚拟机)。使用Macvlan的虚拟机或者容器网络与主机在同一个网段,即同一个广播域中。

Macvlan支持5种模式,分别是bridge、VEPA、Private、Passthru和Source模式。

  1. bridge模式

该模式类似Linux bridge,在bridge模式下,拥有相同父接口的两块Macvlan虚拟网卡可以直接通信,不需要把流量通过父接口发送到外部网络。Macvlan bridge模式如图1-26所示。

图1-26 Macvlan bridge模式

bridge模式的缺点是如果父接口故障,所有Macvlan子接口会跟着故障,子接口之间也将无法进行通信。

  1. VEPA模式

VEPA(Virtual Ethernet Port Aggregator,虚拟以太网端口聚合)是默认模式。所有从Macvlan接口发出的流量,不管目的地址是什么,全部“一股脑”地发送给父接口。在VEPA模式下,从父接口收到的广播包会洪泛给所有的子接口。Macvlan VEPA模式如图1-27所示。

图1-27 Macvlan VEPA模式

如果想在物理交换机层面对虚拟机或容器之间的访问流量进行优化设定,VEPA模式是一种比较好的选择。

  1. Private模式

Private模式类似于VEPA模式,但又增强了VEPA模式的隔离能力,其完全阻止共享同一父接口的Macvlan虚拟网卡之间的通信。Macvlan Priviate模式如图1-28所示。

图1-28 Macvlan Private模式

Private的具体实现方式是丢弃广播/多播数据,这就意味着以太网地址解析ARP将无法工作。

如果需要Macvlan的隔离功能,那么Private模式会非常有用。

  1. Passthru模式

Passthru模式翻译过来就是直通模式。在这种模式下,每个父接口只能和一个Macvlan网卡捆绑,并且Macvlan网卡继承父接口的MAC地址。Macvlan Passthru模式如图1-29所示。

图1-29 Macvlan Passthru模式

在VEPA和Passthru模式下,两个Macvlan网卡之间的通信会经过父接口两次——第一次是发出的时候,第二次是返回的时候。除了限制了Macvlan接口之间的通信性能,还影响物理接口的宽带。

  1. Source模式

在这种模式下,寄生在物理设备上,Macvlan设备只接收指定的源Mac地址的数据包,其他数据包一概丢弃。

1.8.2 测试使用Macvlan设备

在宿主机上创建Macvlan设备:

查看该Macvlan网卡的详细信息:

启用Macvlan网卡:

一般情况下,Macvlan设备的MAC地址是Linux系统自动分配的。使用以下命令就可在新建Macvlan网卡的同时指定其MAC地址:

删除Macvlan网卡:

1.8.3 Macvlan的跨机通信

实验环境包含两个节点,分别是A节点,IP地址为192.168.1.2;B节点,IP地址为192.168.1.3。

在A节点上创建一个不带网络初始化的Docker容器:

获取新创建容器对应的PID:

(图中应为2084)

创建Macvlan设备:

将Macvlan设备eth0.1放入容器的网络namespace中:

进入网络namespace中配置Macvlan网卡:

从主机B上访问容器test1,可以ping通:

从主机A上ping容器test1,发现不通:

在Macvlan虚拟网络中,物理网卡(父接口)对于进出其子Macvlan网卡的数据包,只转发数据包而不处理,所以使用本机Macvlan网卡的IP无法和物理网卡的IP通信。

因此,Macvlan只为虚拟机或容器提供访问外部物理网络的连接。

1.8.4 Macvlanoverlay对比

Macvlan和overlay的网络作用范围不一样。overlay是全局作用范围类型的网络,而Macvlan的作用范围只是本地。举例来说,全局类型的网络可以作用于一个Docker集群,而本地类型的网络只作用于一个Docker节点。

每个宿主机创建的Macvlan网络都是独立的,一台机器上创建的Macvlan网络并不影响另一台机器上的网络。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/128896160