Macvlan 網路驅動程式
某些應用程式,尤其是遺留應用程式或監控網路流量的應用程式,期望直接連線到物理網路。在這種情況下,你可以使用 `macvlan` 網路驅動程式為每個容器的虛擬網路介面分配一個 MAC 地址,使其看起來像直接連線到物理網路的物理網路介面。在這種情況下,你需要指定 Docker 主機上的一個物理介面用於 Macvlan,以及網路的子網和閘道器。你甚至可以使用不同的物理網路介面隔離你的 Macvlan 網路。
請記住以下事項
你可能會因為 IP 地址耗盡或“VLAN 蔓延”而無意中降低網路效能,“VLAN 蔓延”是指網路中具有過多唯一 MAC 地址的情況。
你的網路裝置需要能夠處理“混雜模式”,即一個物理介面可以分配多個 MAC 地址。
如果你的應用程式可以使用橋接(在單個 Docker 主機上)或覆蓋(在多個 Docker 主機之間通訊),這些解決方案可能從長遠來看更好。
選項
下表描述了在使用 `macvlan` 驅動程式建立網路時可以傳遞給 `--opt` 的特定於驅動程式的選項。
選項 | 預設值 | 描述 |
---|---|---|
macvlan_mode | bridge | 設定 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 驅動程式。