Macvlan 網路驅動程式
某些應用程式,特別是傳統應用程式或監控網路流量的應用程式,需要直接連線到物理網路。在這種情況下,您可以使用 macvlan
網路驅動程式為每個容器的虛擬網路介面分配 MAC 地址,使其看起來像是直接連線到物理網路的物理網路介面。在這種情況下,您需要指定 Docker 主機上要用於 Macvlan 的物理介面,以及網路的子網和閘道器。您甚至可以使用不同的物理網路介面隔離 Macvlan 網路。
請牢記以下幾點
由於 IP 地址耗盡或“VLAN 擴充套件”情況,您可能會無意中降低網路效能,這種情況發生在網路中擁有過多不必要的唯一 MAC 地址時。
您的網路裝置需要能夠處理“混雜模式”,在這種模式下,一個物理介面可以分配多個 MAC 地址。
如果您的應用程式可以使用橋接(在單個 Docker 主機上)或覆蓋網路(跨多個 Docker 主機進行通訊),那麼從長遠來看,這些解決方案可能更好。
選項
下表描述了您在使用 macvlan
驅動程式建立網路時,可以傳遞給 --option
的驅動程式特定選項。
選項 | 預設值 | 說明 |
---|---|---|
macvlan_mode | bridge | 設定 Macvlan 模式。可以是以下之一:bridge 、vepa 、passthru 、private |
parent | 指定要使用的父介面。 |
建立 Macvlan 網路
建立 Macvlan 網路時,它可以處於橋接模式或 802.1Q 中繼橋接模式。
在橋接模式下,Macvlan 流量透過主機上的物理裝置。
在 802.1Q 中繼橋接模式下,流量透過 Docker 動態建立的 802.1Q 子介面。這允許您以更細粒度的級別控制路由和過濾。
橋接模式
要建立與給定物理網路介面橋接的 macvlan
網路,請使用 --driver macvlan
和 docker 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 驅動程式。