Macvlan 網路驅動程式

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

請記住以下事項

  • 您可能會因為 IP 位址耗盡或「VLAN 擴散」(網路中存在過多唯一 MAC 位址的情況)而無意中降低網路效能。

  • 您的網路設備需要能夠處理「混雜模式」,其中一個實體介面卡可以被指派多個 MAC 位址。

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

選項

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

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

建立 Macvlan 網路

當您建立 Macvlan 網路時,它可以採用橋接模式或 802.1Q Trunk 橋接模式。

  • 在橋接模式下,Macvlan 流量會通過主機上的實體裝置。

  • 在 802.1Q Trunk 橋接模式下,流量會通過 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 Trunk 橋接模式

如果您指定的 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 Daemon 設定為允許 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 驅動程式。