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 驱动程序。