除了 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 網絡。