端口数据平面状态¶
https://bugs.launchpad.net/neutron/+bug/1598081
Neutron 可能无法很好地检测到影响底层网络基础设施的数据平面故障。本规范通过允许外部工具向 Neutron 报告影响端口的底层数据平面中的故障来解决此问题。为此,提出了一种新的 REST API 字段。
问题描述¶
最初的问题描述在 bug #159801 中提出 [1]。本规范侧重于捕获其中一个(主要)部分的问题,即扩展 Neutron 的 REST API 以涵盖允许外部工具向 Neutron 报告网络故障的场景。本规范的范围不包括启用机制驱动程序接收和管理端口状态更改的工作。
本规范提供了解决 bug #1575146 [2] 的管道,以便在后续工作中进行处理。具体而言,正如 Neutron 驱动程序团队在 [3] 中论证的那样
在检测到底层网络故障时,Neutron 不应完全关闭端口;同一节点上的实例之间的连接仍然可以访问。外部工具可能希望也可能不希望根据其自身的逻辑和编排来触发端口上的状态更改。
当交换机的上行链路关闭时,无法检测到端口关闭。
物理网络桥接器可能连接了多个物理接口;当存在网络冗余时,关闭逻辑端口可能不是必需的。
用例¶
云基础设施的网络元素由两个 SDN 控制器管理:SDN 控制器 A 管理托管在 OpenStack 节点上的虚拟交换机,SDN 控制器 B 管理机架顶端 (ToR) 交换机。
+---------------+
| Orchestrator/ |
+-----------+ Fault Mmgmt +---------+
| +---------------+ |
| |
| |
+------+-------+ +-----+----+
| SDN | | Neutron |
| Controller B | +-----+----+
+------+-------+ |
| |
| |
| +------+-------+
+-----+------+ | SDN |
| ToR Switch | | Controller A |
+------------+ +------+-------+
|
|
|
+----+----+
| vSwitch |
+---------+
SDN 控制器 B 具有网络监控功能,可以使北向用户在拓扑结构发生变化时收到通知,例如由于硬件故障或拔出电缆。在这种用例中,用户是具有故障管理功能的编排器,它从多个数据源收集故障事件并更新受影响的云资源的的状态。编排器可以由各种 OpenStack 项目组成,例如 Vitrage/Monasca 用于根本原因分析 (RCA)、Congress 用于云资源状态更新和修复操作,以及 Aodh 用于事件告警。
一种可能的工作流程是
SDN 控制器 B 检测到 ToR 交换机端口关闭并报告给编排器;
编排器找到受影响的云资源(例如,连接到 Nova 实例的 Neutron 端口(子)集),这些资源是由底层数据平面中断引起的;
编排器更新这些 Neutron 端口的数据平面状态;
Neutron 向消息总线发送通知;
Aodh 和 Congress 消费 Neutron 通知
Aodh 向受影响的 Neutron 端口用户发送事件告警;
Congress 触发修复操作(例如,Congress 策略操作)以切换到备用实例。
类似的工作流程在 OpenStack Summit Barcelona 主题演讲演示中展示 [4]。
提议的变更¶
在 [1] (评论 #3) 中提出了几种可能的方法。本规范建议通过向端口资源添加新的扩展 API 来解决此问题。该扩展添加了一个新的属性 data_plane_status 来表示底层数据平面的状态。此属性应由 Neutron 外部的实体管理,而“status”属性由 Neutron 管理。这两个状态属性彼此独立。
该字段应为项目用户只读,对于具有特定角色的任何用户可读写。
数据模型影响¶
将向“ports”表添加一个新的属性作为 Neutron 扩展。
属性名称 |
类型 |
访问 |
默认值 |
验证/转换 |
|---|---|---|---|---|
data_plane_status |
string |
R, project RW, user w/role |
无 |
None, “ACTIVE” “DOWN” |
REST API 影响¶
将引入一个新的 API 扩展到 ports 资源。
EXTENDED_ATTRIBUTES_2_0 = {
'ports': {
'data_plane_status': {'allow_post': False, 'allow_put': True,
'default': None, 'is_visible': True}
},
}
示例¶
将端口数据平面状态更新为 down
PUT /v2.0/ports/<port-uuid>
Accept: application/json
{
"port": {
"data_plane_status": "DOWN"
}
}
命令行客户端影响¶
openstack port set [--data-plane-status <ACTIVE/DOWN>] <port>
参数 –data-plane-status 是可选的。