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 报告工具。 这应涵盖手动运行该工具和解释数据。
参考资料¶
[1] - LLDP 的 Wikipedia 条目:https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol
[2] - Ironic/Neutron 集成蓝图:https://blueprints.launchpad.net/ironic/+spec/ironic-ml2-integration
[3] - 审查:支持库存接口中的 LLDP 数据 https://review.openstack.org/#/c/320584/
[4] - 访问 Ironic 内省数据 http://tripleo.org/advanced_deployment/introspection_data.html
[5] - Ironic API - 获取内省数据 https://docs.openstack.org/developer/ironic-inspector/http-api.html#get-introspection-data