TripleO LLDP 验证

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/tripleo/+spec/tripleo-lldp-validation

链路层发现协议 (LLDP) 是互联网协议套件中的一个厂商中立的链路层协议,由网络设备用于在 IEEE 802 局域网(主要是有线以太网)上广播其身份、功能和邻居信息。[1]

链路层发现协议 (LLDP) 有助于识别主机和交换机之间的 1/2 层连接。交换机端口、机箱 ID、已干道的 VLAN 以及其他信息可用,用于规划或排查部署问题。例如,部署者可以验证链接上是否提供了正确的 VLAN,或者所有主机是否都连接到配置网络。

问题描述

问题详细描述

  • 部署网络是任何 OpenStack 部署中最困难的部分之一。单个配置错误的端口或松动的电缆可能会破坏整个多机架部署。

  • 鉴于第一点,我们应该尽可能地自动化验证和故障排除。

  • 目前正在 ironic-python-agent 中收集 LLDP 数据,我们有机会使这些数据发挥作用 [2]。

提议的变更

概述

目标是公开在内省期间收集的 LLDP 数据,并以对部署者有用的格式提供这些数据。这项工作依赖于 ironic-python-agent 中正在进行的 LLDP 数据收集工作 [3]。

目前正在进行 LLDP 数据收集的 Ironic/Neutron 集成工作。虽然这项工作主要侧重于裸机 Ironic 实例的功能,但它与 TripleO 使用 Ironic 配置超云服务器的方式会有一些重叠。

替代方案

许多网络管理工具使用 CDP 或 LLDP 数据来验证物理网络。其中一些是开源的,但没有一个与 OpenStack 集成。

不使用 LLDP 的替代方法通常是厂商特定的,需要特定的硬件支持。Cumulus 具有一种适用于多个厂商硬件的解决方案,但该解决方案需要在以太网交换机上运行其自定义操作系统。

另一种常见的方法是将交换机配置收集到中心位置,在那里可以查看端口配置,甚至在某些情况下可以更改并远程推送。这种方法的问题在于交换机配置是硬件和厂商特定的,通常需要网络工程师来读取和解释配置。首选一种适用于所有常见交换机厂商的统一方法,以及统一的报告格式。

安全影响

物理网络报告为底层网络结构提供了一个路线图。这对于不知道现有拓扑结构的攻击者来说可能很有用。另一方面,物理网络拓扑信息对于攻击者来说不如逻辑拓扑信息有价值。LLDP 包含一些关于物理和逻辑拓扑的信息,但逻辑拓扑仅限于 VLAN ID。

应将网络拓扑报告视为敏感但非关键信息。ironic-inspector 收集的数据中不会泄露任何凭据或共享密钥。

其他最终用户影响

希望这份报告能够减少网络部署失败的节点的故障排除时间。

性能影响

如果这份报告是作为 ironic-inspector 工作流程的一部分生成的,那么它会使内省每个节点所需的时间增加一个可以忽略不计的量,也许几秒钟。

如果操作员按需调用此报告,则它不会对其他组件的性能产生任何影响。

其他部署者影响

部署者可能需要比每个节点的 LLDP 报告更多的信息。提供汇总报告可能有用,例如具有特定接口配置和已干路的 VLAN 的节点数量。这将有助于突出显示异常值或配置错误的节点。

已经讨论过在 TripleO 中添加自动交换机配置。这将是一种机制,部署者可以基于配置模板使用脚本生成以太网交换机配置。部署者将提供诸如节点数量和每个节点的配置之类的具体信息,脚本将生成与此匹配的交换机配置。在这种情况下,LLDP 数据收集和分析将充当自动生成的交换机端口配置的验证器。

开发人员影响

初始工作将填充诸如机箱 ID 和交换机端口之类的固定字段。但是,LLDP 数据包可以包含基于厂商的附加数据。

长期计划是将整个 LLDP 数据包存储在元数据中。这将需要对其进行解析。如果我们要充分利用它,我们可能需要与交换机厂商合作,以了解如何解释某些数据。

实现

关于实现的一些说明

  • 这个 Python 工具将访问内省数据并生成有关各种信息的报告,例如每个端口的 VLAN、主机到端口的映射以及每个主机的 MAC 地址。

  • 可以使用 Ironic API 检索内省数据 [4] [5]。

  • 数据最初将是一组可检索的固定字段,这些字段位于 Ironic 内省数据的 JSON 中。 稍后,将存储整个 LLDP 数据包,并且需要在 Ironic API 之外对其进行解析。

  • 虽然初始实现可以返回人类可读的报告,但还应提供其他输出以用于自动化,例如 YAML。

  • 生成 LLDP 报告的工具应能够返回单个主机的的数据,或返回所有数据。

  • 一些基本的搜索支持将是一个不错的特性。

  • 这些数据最终将由 GUI 用于在部署工作流程中显示为验证步骤。

负责人

主要负责人

dsneddon <dsneddon@redhat.com>

其他贡献者

bfournie <bfournie@redhat.com>

工作项

  • 使用 API 从 Swift 抓取内省数据的 Python 脚本。

  • 创建 Python 代码以从数据 JSON 中提取相关的 LLDP 数据。

  • 实现每个节点的报告

  • 实现汇总报告

  • 与 UI 开发人员交互,以向他们提供可以被 TripleO UI 消耗和呈现的数据。

  • 将来,当存储整个 LLDP 数据包时,重构逻辑以考虑这一点。

测试

由于这是一份旨在使操作员受益的报告,因此将其包含在 CI 中的最佳方法可能是确保报告被 Undercloud 记录。 然后可以在 CI 运行的日志输出中查看报告。

事实上,这可能会使 TripleO CI 流程受益,因为在无法访问裸机控制台的情况下,更容易排查网络硬件问题。

文档影响

需要编写文档来涵盖如何使用新的 LLDP 报告工具。 这应涵盖手动运行该工具和解释数据。

参考资料