Macvlan 網路驅動程式

某些應用程式,特別是傳統應用程式或監控網路流量的應用程式,需要直接連線到物理網路。在這種情況下,您可以使用 macvlan 網路驅動程式為每個容器的虛擬網路介面分配 MAC 地址,使其看起來像是直接連線到物理網路的物理網路介面。在這種情況下,您需要指定 Docker 主機上要用於 Macvlan 的物理介面,以及網路的子網和閘道器。您甚至可以使用不同的物理網路介面隔離 Macvlan 網路。

請牢記以下幾點

  • 由於 IP 地址耗盡或“VLAN 擴充套件”情況,您可能會無意中降低網路效能,這種情況發生在網路中擁有過多不必要的唯一 MAC 地址時。

  • 您的網路裝置需要能夠處理“混雜模式”,在這種模式下,一個物理介面可以分配多個 MAC 地址。

  • 如果您的應用程式可以使用橋接(在單個 Docker 主機上)或覆蓋網路(跨多個 Docker 主機進行通訊),那麼從長遠來看,這些解決方案可能更好。

選項

下表描述了您在使用 macvlan 驅動程式建立網路時,可以傳遞給 --option 的驅動程式特定選項。

選項預設值說明
macvlan_modebridge設定 Macvlan 模式。可以是以下之一:bridgevepapassthruprivate
parent指定要使用的父介面。

建立 Macvlan 網路

建立 Macvlan 網路時,它可以處於橋接模式或 802.1Q 中繼橋接模式。

  • 在橋接模式下,Macvlan 流量透過主機上的物理裝置。

  • 在 802.1Q 中繼橋接模式下,流量透過 Docker 動態建立的 802.1Q 子介面。這允許您以更細粒度的級別控制路由和過濾。

橋接模式

要建立與給定物理網路介面橋接的 macvlan 網路,請使用 --driver macvlandocker network create 命令。您還需要指定 parent,即流量將在 Docker 主機上物理透過的介面。

$ docker network create -d macvlan \
  --subnet=172.16.86.0/24 \
  --gateway=172.16.86.1 \
  -o parent=eth0 pub_net

如果您需要排除 macvlan 網路中使用的 IP 地址,例如當給定 IP 地址已在使用時,請使用 --aux-addresses

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

802.1Q 中繼橋接模式

如果您指定的 parent 介面名稱包含點,例如 eth0.50,Docker 會將其解釋為 eth0 的子介面並自動建立子介面。

$ docker network create -d macvlan \
    --subnet=192.168.50.0/24 \
    --gateway=192.168.50.1 \
    -o parent=eth0.50 macvlan50

使用 IPvlan 代替 Macvlan

在上面的示例中,您仍然使用的是 L3 橋接。您可以使用 ipvlan 代替,並獲得 L2 橋接。指定 -o ipvlan_mode=l2

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

使用 IPv6

如果您已配置 Docker 守護程式以允許 IPv6,則可以使用雙棧 IPv4/IPv6 macvlan 網路。

$ 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

後續步驟

瞭解如何在Macvlan 網路教程中使用 Macvlan 驅動程式。