Cisco 服务 VM 配置代理

Launchpad蓝图

https://blueprints.launchpad.net/neutron/+spec/cisco-config-agent

此蓝图涵盖 Cisco 配置代理,该代理负责配置 Cisco 服务 VM 以实现网络服务。该代理旨在通用,并支持多种服务。但最初它将仅涵盖 CSR1kv 服务 VM 中的路由和 NAT 服务。该代理的设计灵感来自当前的 L3 代理,后者在 Linux 命名空间中配置 neutron 路由器。

此蓝图依赖于蓝图:https://blueprints.launchpad.net/neutron/+spec/cisco-routing-service-vm,它实现了插件端。

问题描述

存在使用服务 VM 实现的 Neutron 服务用例。CSR1kv 就是这样一个可以实现各种网络服务(如路由、NAT、防火墙、VPN 等)的服务 VM。

此处提出的配置代理将连接并配置 CSR1kv VM 以实现 Neutron 路由器。Neutron 路由器在 CSR1kv VM 中配置为 VRF。该代理还将配置外部网关的 NAT 和浮动 IP 功能。

用例

  1. 通过服务 VM 实现和配置 Neutron 路由器。

提议的变更

此更改将引入一个 Cisco 配置代理(以下称为配置代理),类似于当前的 L3 代理,但适用于服务 VM。

下图提供了配置代理如何与其他组件配合使用及其南北向接口的高层概述。

+––––––––––––––––––––+
|cisco routing       |
|service plugin      |
+–––––––––+––––––––––+
          |
          |
+–––––––––+––––––––––+
|cisco configuration |
|agent               |
+–––––––––+––––––––––+
          |
+–––––––––+––––––––––+
|service VM          |
|(CSR1kv)            |
+––––––––––––––––––––+

请注意,与 l3 代理不同,配置代理可以管理和配置多个设备。系统中可以有一个或多个配置代理。插件会将要管理的总设备数分配给这些代理。但任何时候,一个服务 VM 只能由一个配置代理配置。插件完成此分配。

只要它可以访问这些设备,配置代理就可以在任何节点上运行,甚至包括控制器/网络节点。

故障处理

配置代理实现代理状态报告框架并定期发送状态报告。此机制也用于检测失败的代理。如果代理失败,则服务 VM 和其中配置的服务将被转移到不同的配置代理。

假设

服务 VM 由云管理员拥有和管理。它们对租户不可见。它们连接到映射到 neutron 中提供者网络的管理网络。此管理网络可以与 OpenStack 管理网络分开。此外,提供网络服务的 VM 被视为管理员可以安全地将其连接到管理网络的受信任 VM。

设计

配置代理具有模块化设计,包含许多组件。它们是

  • 插件 RPC:处理与插件端通信。

  • 设备驱动程序:单个设备(或多个设备)的配置逻辑。还封装配置协议,例如:Netconf 或 REST。

  • 服务助手:封装任何簿记操作或中间转换的逻辑,然后再调用驱动程序。

  • 健康监控:监控正在配置的设备的状态,并将无法访问的设备报告回插件。

组件

+––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––+
|                                                            |
|                     +————————+                             |
|                    +—––––––+ |                             |
|                    |Plugin | |                             |
|                    |RPC    +—+                             |
|                    +–––––––+                               |
|    +––––––––––+                     +––––––––––––––––+     |
|    |Health    |                     |(routing)       |     |
|    |Monitoring|    Config agent     |service helper  |-+   |
|    +––––––––––+                     +-–––––––––––––––+ |   |
|                                      +_________________+   |
|                                                            |
|                   +–––––––+                                |
|                   |Device |                                |
|                   |Driver |—+                              |
|                   +——–––––+ |                              |
|                    +––––––——+                              |
|                                                            |
+––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––+

当添加其他服务时,它们可以添加自己的插件 RPC、服务助手和设备驱动程序。此外,一个服务也可以有多个设备驱动程序。插件在 RPC 消息中的资源字典中指定用于配置特定设备的设备驱动程序。

备选方案

另一种解决方案是直接从服务插件配置设备(服务 VM)。虽然可行,但这会增加插件的负载,插件还负责 API 和 DB 组件。

数据模型影响

配置代理不使用持久性。因此,没有添加新的模型。所有现有模型均未更改。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

与直接从插件执行此操作相比,为配置任务和健康监控提供单独的配置代理可以减少 neutron 服务器的负载。其次,由于配置代理不必与它配置的设备共置,并且可以管理多个设备,因此报告给 neutron 服务器的代理状态流量减少了,与 l3 代理相比。

由于配置代理协调如何在设备中应用多个服务的配置,因此减少了设备上的控制平面负载,并减轻了错误配置状态的风险。

配置代理使用设备驱动程序,后者本身使用 Netconf、REST API 等来配置设备。这些机制需要连接并验证设备,并在进行配置之前建立会话。会话建立增加了一定的但必要的开销。

其他部署者影响

服务 VM 具有连接到管理网络的管理端口。配置代理通过此管理网络连接到设备,因此运行它的主机应具有与此网络的连接性。

开发人员影响

无。路由服务助手公开与参考 l3 代理相同的 RPC 方法,从而保持向后兼容性。

实现

负责人

Hareesh Puthalath <hareesh-puthalath>

工作项

工作分为两部分

  1. 配置代理本身。

  2. CSR1kv 的路由服务驱动程序。

依赖项

没有新的库要求。它依赖于蓝图中提到的修改后的服务插件:https://blueprints.launchpad.net/neutron/+spec/cisco-routing-service-vm

测试

包含代码的完整单元测试覆盖率。

对于 tempest 测试覆盖,将提供第三方测试。Cisco CI 报告所有影响配置代理的更改。

文档影响

没有直接影响。但是,文档需要指示如何使用配置代理(如果需要)。

参考资料

http://www.cisco.com/c/en/us/products/routers/cloud-services-router-1000v- 系列/index.html