Red Hat Training

A Red Hat training course is available for RHEL 8

第 37 章 开始使用 IPVLAN

本文档描述了 IPVLAN 驱动程序。

37.1. IPVLAN 概述

IPVLAN 是虚拟网络设备的驱动程序,可在容器环境中用于访问主机网络。无论主机网络中创建的 IPVLAN 设备数量,IPVLAN 会向外部网络公开一个 MAC 地址。这意味着,用户可以在多个容器中有多个 IPVLAN 设备,相应的交换机会读取单个 MAC 地址。当本地交换机对其可管理的 MAC 地址总数实施限制时,IPVLAN 驱动程序很有用。

37.2. IPVLAN 模式

IPVLAN 有以下模式可用:

  • L2 模式

    在 IPVLAN L2 模式 中,虚拟设备接收并响应地址解析协议(ARP)请求。netfilter 框架仅在拥有虚拟设备的容器中运行。容器化流量的默认命名空间中没有执行 netfilter 链。使用L2 模式会提供良好的性能,但对网络流量的控制要小。

  • L3 模式

    L3 模式 中,虚拟设备只处理 L3 以上的流量。虚拟设备不响应 ARP 请求,用户必须手动为相关点上的 IPVLAN IP 地址配置邻居条目。相关容器的出口流量会放在 default 命名空间的 netfilter POSTROUTING 和 OUTPUT 链上,而入口流量会线程处理,方式与 L2 模式 相同。使用L3 模式会提供很好的控制,但可能会降低网络流量性能。

  • L3S 模式

    L3S 模式 中,虚拟设备处理方式与 L3 模式 相同,唯一的不同是,相关容器的出口和入站流量都位于 default 命名空间的 netfilter chain 上。L3S 模式 的行为方式和 L3 模式 相似,但提供了对网络的更大控制。

注意

对于 L3L3S 模式,IPVLAN 虚拟设备不接收广播和多播流量。

37.3. MACVLAN 概述

MACVLAN 驱动程序允许在一个 NIC 上创建多个虚拟网络设备,每个网卡都由其自身唯一的 MAC 地址标识。物理 NIC 上的数据包通过目的地的 MAC 地址与相关的 MACVLAN 设备进行多路复用。MACVLAN 设备不添加任何级别的封装。

37.4. IPVLAN 和 MACVLAN 的比较

下表显示了 MACVLAN 和 IPVLAN 的主要区别。

MACVLANIPVLAN

为每个 MACVLAN 设备使用 MAC 地址。交换中 MAC 表的 MAC 地址限制可能会导致连接丢失。

使用不限制 IPVLAN 设备数的单个 MAC 地址。

全局命名空间的 netfilter 规则不会影响子命名空间中到达或从 MACVLAN 设备的网络流量。

有可能在 L3 模式L3S 模式中控制到 IPVLAN 设备或者来自 IPVLAN 设备的网络流量。

请注意,IPVLAN 和 MACVLAN 不需要任何级别的封装。

37.5. 使用 iproute2 创建和配置 IPVLAN 设备

这个步骤演示了如何使用 iproute2 设置 IPVLAN 设备。

流程

  1. 要创建 IPVLAN 设备,请输入以下命令:

    ~]# ip link add link real_NIC_device name IPVLAN_device type ipvlan mode l2

    请注意:网络接口控制器(NIC)是将计算机连接到网络的一个硬件组件。

    例 37.1. 创建 IPVLAN 设备

    ~]# ip link add link enp0s31f6 name my_ipvlan type ipvlan mode l2
    ~]# ip link
    47: my_ipvlan@enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:6e:8a:a2:44 brd ff:ff:ff:ff:ff:ff
  2. 要为接口分配 IPv4IPv6 地址,请输入以下命令:

    ~]# ip addr add dev IPVLAN_device IP_address/subnet_mask_prefix
  3. 如果在 L3 模式L3S 模式中配置 IPVLAN 设备,请进行以下设置:

    1. 在远程主机上为远程 peer 配置邻居设置:

      ~]# ip neigh add dev peer_device IPVLAN_device_IP_address lladdr MAC_address

      其中 MAC_address 是 IPVLAN 设备所基于的实际网卡的 MAC 地址。

    2. 使用以下命令为 L3 模式 配置 IPVLAN 设备:

      ~]# ip neigh add dev real_NIC_device peer_IP_address lladdr peer_MAC_address

      对于 L3S 模式

      ~]# ip route dev add real_NIC_device peer_IP_address/32

      其中 IP-address 代表远程 peer 的地址。

  4. 要设置活跃的 IPVLAN 设备,请输入以下命令:

    ~]# ip link set dev IPVLAN_device up
  5. 要检查 IPVLAN 设备是否活跃,请在远程主机中执行以下命令:

    ~]# ping IP_address

    其中 IP_address 使用 IPVLAN 设备的 IP 地址。