Macvlan 网络驱动程序
某些应用程序,特别是遗留应用程序或监控网络流量的应用程序,期望直接连接到物理网络。在这种情况下,您可以使用 macvlan
网络驱动程序为每个容器的虚拟网络接口分配一个 MAC 地址,使其看起来像直接连接到物理网络的物理网络接口。在这种情况下,您需要指定 Docker 主机上用于 Macvlan 的物理接口,以及网络的子网和网关。您甚至可以使用不同的物理网络接口隔离您的 Macvlan 网络。
请注意以下事项
您可能会因 IP 地址耗尽或“VLAN 扩散”(当网络中出现不恰当的大量唯一 MAC 地址时发生的情况)而无意中降低网络性能。
您的网络设备需要能够处理“混杂模式”,即一个物理接口可以被分配多个 MAC 地址。
如果您的应用程序可以使用 bridge(在单个 Docker 主机上)或 overlay(跨多个 Docker 主机通信),从长远来看,这些解决方案可能更好。
选项
下表描述了在使用 macvlan
驱动程序创建网络时可以传递给 --opt
的驱动程序特有的选项。
选项 | 默认值 | 说明 |
---|---|---|
macvlan_mode | bridge | 设置 Macvlan 模式。可以是以下之一:bridge 、vepa 、passthru 、private |
parent | 指定要使用的父接口。 |
创建 Macvlan 网络
创建 Macvlan 网络时,它可以在 bridge 模式或 802.1Q trunk bridge 模式下运行。
在 bridge 模式下,Macvlan 流量通过主机上的物理设备。
在 802.1Q trunk bridge 模式下,流量通过 Docker 动态创建的 802.1Q 子接口。这允许您在更精细的粒度上控制路由和过滤。
Bridge 模式
要创建一个与给定物理网络接口桥接的 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 bridge 模式
如果您指定的 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 bridge。您可以改用 ipvlan
,以获得 L2 bridge。指定 -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 驱动程序。