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 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 驅動程式。