VIF 类型

os-vif 中,VIF 类型指的是配置来宾虚拟网络接口后端的特定方法。对于任何给定的 hypervisor,VIF 后端可以配置的方式只有少量且有限的几种,并且每种方法都关联着有限的元数据。

VIF 对象

每种不同的 VIF 配置类型都由一个版本化的对象表示,该对象继承自 VIFBase

class os_vif.objects.vif.VIFBase(context=None, **kwargs)

表示一个虚拟网络接口。

基础 VIF 定义了所有类型的 VIF 共有的字段,并提供了与 VIF 接入的网络关联。不应自行实例化它,而应使用子类。

class os_vif.objects.vif.VIFGeneric(context=None, **kwargs)

一种通用风格的 VIF。

通用风格的 VIF 是未绑定的、浮动的 TUN/TAP 设备,应由插件设置,而不是 hypervisor。TAP 设备如何连接到主机网络堆栈明确留未定义。

对于 libvirt 驱动程序,这映射到 type=”ethernet”,这仅仅意味着一个裸 TAP 设备,所有设置都委托给插件。

class os_vif.objects.vif.VIFBridge(context=None, **kwargs)

一种桥接风格的 VIF。

桥接风格的 VIF 由 hypervisor 绑定到 Linux 主机桥接。这提供了以太网层桥接,通常连接到局域网。其他设备可以绑定到相同的 L2 虚拟桥接。

对于 libvirt 驱动程序,这映射到 type=’bridge’。

class os_vif.objects.vif.VIFOpenVSwitch(context=None, **kwargs)

一种专门用于 OVS 的桥接风格 VIF。

Open vSwitch VIF 由 hypervisor 直接(或间接)绑定到 Open vSwitch 桥接。其他设备可以绑定到相同的虚拟桥接。

对于 libvirt 驱动程序,这也映射到 type=’bridge’。

class os_vif.objects.vif.VIFDirect(context=None, **kwargs)

一种直连风格的 VIF。

尽管名称令人困惑,直连风格的 VIF 使用 macvtap,这是一种设备驱动程序,它在来宾和 SR-IOV 虚拟功能 (VF) 之间插入一个软件层。这与 VIFHostDevice 形成对比,后者允许来宾直接连接到 VF。

与设备的连接可以在多种不同的模式下运行,VEPA(无论是 802.1Qbg 还是 802.1Qbh),直通(独占分配主机网卡)或桥接(以太网层桥接流量)。直通模式将在需要具有 MAC 地址或 VLAN 配置的网络设备时使用。对于不需要 MAC/VLAN 配置的网络设备的直通,应使用 VIFHostDevice 代替。

对于 libvirt 驱动程序,这映射到 type=’direct’

class os_vif.objects.vif.VIFVHostUser(context=None, **kwargs)

一种 vhostuser 风格的 VIF。

vhostuser 风格的 VIF 使用 userspace vhost 后端,允许流量在来宾和主机用户空间应用程序(通常是虚拟交换机)之间传输,绕过内核网络堆栈。这与 VIFBridge 形成对比,其中所有数据包必须由 hypervisor 处理。

对于 libvirt 驱动程序,这映射到 type=’vhostuser’

class os_vif.objects.vif.VIFNestedDPDK(context=None, **kwargs)

一种嵌套 DPDK 风格的 VIF。

嵌套 DPDK 风格的 VIF 由 Kuryr-Kubernetes 用于为在 VM 中运行的嵌套 Kubernetes pod 提供加速 DPDK 数据路径。端口首先连接到虚拟机,绑定到用户空间驱动程序(例如 uio_pci_genericigb_uiovfio-pci),然后通过 kuryr-kubernetes CNI 插件由 Kubernetes pod 消耗。

这不适用于 libvirt 驱动程序。

VIF 端口配置文件对象

每个 VIF 实例可以选择性地与端口配置文件对象关联。这提供了一组元数据属性,用于将来宾虚拟接口标识给主机。不同类型的 host 连接需要不同的端口配置文件对象元数据。每种端口配置文件类型都与一个版本化的对象关联,该对象继承自 VIFPortProfileBase

class os_vif.objects.vif.VIFPortProfileBase(context=None, **kwargs)

所有类型的端口配置文件的基类。

基础配置文件定义了所有类型的配置文件共有的字段。不应自行实例化它,而应使用子类。

class os_vif.objects.vif.VIFPortProfileOpenVSwitch(context=None, **kwargs)

Open vSwitch 网络的端口配置文件信息。

此配置文件提供将 VIF 与 Open vSwitch 接口关联所需的元数据。

class os_vif.objects.vif.VIFPortProfileFPOpenVSwitch(context=None, **kwargs)

使用快速路径的 Open vSwitch 网络的端口配置文件信息。

此配置文件提供将 fast path VIF 与 Open vSwitch 端口关联所需的元数据。

class os_vif.objects.vif.VIFPortProfileOVSRepresentor(context=None, **kwargs)

使用 representor 的 OpenVSwitch 网络的端口配置文件信息。

此配置文件提供将 VIF 与 VF representor 和 Open vSwitch 端口关联所需的元数据。如果指定了 representor_name,则表示在连接时希望将 representor 重命名为给定的名称。

注意

此端口配置文件仅提供用于向后兼容性。

此接口已被 DatapathOffloadRepresentor 类提供的一个取代,后者现在是 VIFPortProfileBase 类中的一个字段元素。应使用端口配置文件中的 datapath_offload 字段代替。

class os_vif.objects.vif.VIFPortProfileFPBridge(context=None, **kwargs)

使用快速路径的 Linux Bridge 网络的端口配置文件信息。

此配置文件提供将 fast path VIF 与 Linux Bridge 端口关联所需的元数据。

class os_vif.objects.vif.VIFPortProfileFPTap(context=None, **kwargs)

使用快速路径的 Calico 网络的端口配置文件信息。

此配置文件提供将 fast path VIF 与 Calico 端口关联所需的元数据。

class os_vif.objects.vif.VIFPortProfile8021Qbg(context=None, **kwargs)

VEPA 802.1qbg 网络端口配置文件信息。

此配置文件提供将 VIF 与支持 802.1Qbg 规范的 VEPA 主机设备关联所需的元数据。

class os_vif.objects.vif.VIFPortProfile8021Qbh(context=None, **kwargs)

VEPA 802.1qbh 网络端口配置文件信息。

此配置文件提供将 VIF 与支持 802.1Qbh 规范的 VEPA 主机设备关联所需的元数据。

class os_vif.objects.vif.VIFPortProfileK8sDPDK(context=None, **kwargs)

Kuryr-Kubernetes DPDK 端口的端口配置文件信息。

此配置文件提供将嵌套 DPDK VIF 与 Kubernetes pod 关联所需的元数据。

数据通路卸载类型对象

端口配置文件可以与 datapath_offload 对象关联。这提供了一组元数据属性,用于标识 VIF 的数据通路卸载参数。每种不同类型的数据通路卸载都与版本化的对象关联,该对象继承自 DatapathOffloadBase

class os_vif.objects.vif.DatapathOffloadBase(context=None, **kwargs)

所有类型数据通路卸载的基类。

class os_vif.objects.vif.DatapathOffloadRepresentor(context=None, **kwargs)

符合 switchdev 模型 VF 代表器的卸载类型。

此数据通路卸载提供将 VIF 与符合 VF 代表器的元数据,该代表器符合 switchdev 内核模型。如果指定了 representor_name,则表示在连接时希望将代表器重命名为给定的名称。

VIF 网络对象

每个 VIF 实例都与一组描述客户机将要连接到的逻辑网络的对象相关联。这些信息同样由一组版本化的对象表示