除了 overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlan。
macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了。
macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。下面我们就来创建一个 macvlan 网络。
准备实验环境
我们会使用 host1 和 host2 上单独的网卡 enp0s9 创建 macvlan。为保证多个 MAC 地址的网络包都可以从 enp0s9 通过,我们需要打开网卡的混杂模式。
ip link set enp0s9 promisc on
确保 enp0s9 状态 UP 并且 promisc 模式已经生效。
因为 host1 和 host2 是 VirtualBox 虚拟机,还需要在网卡配置选项页中设置混杂模式。
当前实验环境如图所示:
准备就绪,下一节我们创建 macvlan 网络。