Macvlan 網路驅動程式

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

請記住以下事項

  • 你可能會因為 IP 地址耗盡或“VLAN 蔓延”而無意中降低網路效能,“VLAN 蔓延”是指網路中具有過多唯一 MAC 地址的情況。

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

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

選項

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

選項預設值描述
macvlan_modebridge設定 Macvlan 模式。可以是以下之一:`bridge`、`vepa`、`passthru`、`private`
parent指定要使用的父介面。

建立 Macvlan 網路

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

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

  • 在 802.1Q 中繼橋接模式下,流量透過 Docker 即時建立的 802.1Q 子介面。這允許你更精細地控制路由和過濾。

橋接模式

要建立與給定物理網路介面橋接的 `macvlan` 網路,請使用 `docker network create` 命令和 `--driver macvlan`。你還需要指定 `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 驅動程式。