端口绑定记录、能力和事件

https://bugs.launchpad.net/neutron/+bug/1821058

在 Nova/Neutron/os-vif 交互中,存在几种需要 neutron 核心插件或 ML2 驱动程序了解的情况,以便更可靠地处理客户网络。例如,[3]

本规范旨在通过引入新的扩展来增强端口绑定 API,以提供 Nova 和 os-vif 做出更明智的端口绑定信息使用的额外信息。

请记住,os-vif 仅旨在从 Nova 中移除 VIF 插件过程。超visor 配置(例如:libvirt XML 生成)仍然是 Nova 的责任。虽然 os-vif 移除了与插件和断开过程相关的网络后端逻辑,但 Nova 仍然需要处理本规范中提出的信息。

问题描述

本规范旨在解决 3 个相关问题。

网络连接

[3]蓝图旨在启用使用 ip_allocation=none 的实例。端口参数“ip_allocation”是在 [1] 中引入的,用于“区分未寻址端口的情况和涉及路由网络的延迟 IP 分配情况”(摘自 [2])。

为了安全地执行此操作并保证客户将具有网络连接,Nova 必须确保绑定端口的网络后端提供 L2 连接。

例如,在混合 Calico/SR-IOV 部署中,对于由 SR-IOV ML2 驱动程序绑定的任何端口,使用 ip_allocation=none 是有效的,但对于 Calico 后端则不然。在这种情况下,Calico 提供的唯一连接到客户机的连接是 L3,因此不可能在没有 IP 地址的情况下启动 VM。

网络隔离

在解决 [4] 时,需要在 os-vif 中添加一个新的配置选项,以允许为 ML2/ovs 后端启用 VIF 隔离。由于 Nova 无法区分由 ML2/odl 或 ML2/ovs 绑定的 VIF_TYPE=”ovs”,因此它无法自动指示 os-vif 为 ML2/ovs 主机启用或禁用 VIF 隔离。如果将绑定端口的 ML2 驱动程序记录在端口绑定详细信息中,Nova 和 os-vif 可以使用该信息更智能地启用后端特定的代码路径,而无需额外的网络后端特定的配置选项。

带宽调度

网络驱动程序信息也可用于 Stein 中实现的功能带宽调度,如 [6] 中所指出的。目前,Nova 无法处理 PF 由一个 ML2 驱动程序使用,而 VF 由 SR-IOV ML2 驱动程序管理的情况。

提议的变更

为了解决上述 3 个问题,建议对端口对象的 binding:vif_details 字典进行以下添加

  • 将引入一个新的 connectivity 字段,允许的值为“l2”、“l3”和“legacy”。“legacy” connectivity 值将是默认值,并且是一个哨兵,指示驱动程序尚未支持此扩展,并且没有连接信息可用。“l2”驱动程序提供第二层连接,例如 Linux Bridge、Open vSwitch 或 SR-IOV。“l3”驱动程序仅提供第三层连接,例如 Calico [8]

  • 将添加一个新的 bound_drivers 字段,该字段是一个将 binding_level 映射到驱动程序名称的字典。驱动程序名称将是驱动程序的 stevedore 入口点名称,该名称已在配置文件中使用,并且旨在保持稳定。POC 在 [7] 中可用。

为了启用 connectivity 的声明,将向 ML2 驱动程序基类添加一个新的属性,该属性将默认设置为“legacy”。从该属性继承的 ML2 驱动程序将覆盖该属性。

bound_drivers 字段将由 OVS os-vif 插件用于移除 [5] 的需要。我们仅在需要时才能启用此选项。

示例

ML2/ovs

binding_details: {
    ...
    "connectivity": "l2",
    "bound_drivers": {"0": "openvswtich"}
}

ML2/odl v1

binding_details: {
    ...
    "connectivity": "legacy",
    "bound_drivers": {"0": "opendaylight"}
 }

ML2/odl v2

binding_details: {
    ...
    "connectivity": "l2",
    "bound_drivers": {"0": "opendaylight_v2"}
}

ML2/calico

binding_details: {
    ...
    "connectivity": "l3",
    "bound_drivers": {"0": "calico"}
}

参考资料