NetworkContainers
- Launchpad 条目: NovaSpec:netcontainers
- 创建: 2011-04-06
- 贡献者:
总结
Cisco 关于 OpenStack: 网络的提案 (NaaS)
我们正在提出 OpenStack: 网络的提案,作为一流的 OpenStack 服务。 虽然我们与其他 NetworkService 提案共享需求和许多设计理念/原则(许多贡献者同时参与这两个提案),但此蓝图的主要动机是向 OpenStack 社区预览整体提案和一些新的想法、用于 OpenStack: NaaS 考虑的概念。 此提案还扩展了其草案中指定的 NetworkService 要求。
发布说明
待定
设计
概述
OpenStack: NaaS 提供网络抽象层和一组 API(图 1),以实现: * 请求和获取 OpenStack:Compute 用于互连两个 VM 实例的网络连接,无论是单个虚拟网络(单个 vnic)还是多个 vnic 到不同的虚拟网络。<
> * 在适当的虚拟网络中插入网络服务(例如防火墙、负载均衡器、广域加速服务);并动态请求“自适应”网络资源。<
> * 任何需要网络资源可见性或消耗的 OpenStack 应用程序或服务,例如:DR 应用程序、网络健康/监控服务、计费/结算服务等。<
> * 需要互连 OpenStack “区域”或地理分散的计算/存储资源的网络资源。<
> * 支持新服务(如虚拟私有云、企业扩展)所需的网络资源。<
> * 未来,此 NaaS 可以扩展以支持 SLA、网络级 QoS 和其他基于网络的审计/监控服务。<
>
图 2 显示了 OpenStack:Network 逻辑组件。 
虚拟网络
如今的 nova:network 支持三种“网络模型”(a)FlatNetwork (b)FlatNetworkwithDHCP (c) VLAN with VPN GW instance。 该模型的缺点在其他提案中已有充分记录,而且它限制性很大。 在这种新的 Naas 模型中,网络抽象完全隐藏了用于实现网络分段的技术,例如:最初这可以通过 VLAN 标签来实现,未来不同的供应商可能会采用其专有/未来标准的分段方案,以提供可扩展性和灵活性。 考虑到这一点,虚拟网络主要是 L2 段(未来提供 L3 服务)。 这简化了所有其他 Openstack 服务对网络段的理解,并隐藏了“平台特定”的复杂性,使其对网络设备(物理和虚拟形式)而言更加简单。
=== NetContainer(NC) === 一个逻辑实体,最初为每个 OpenStack "项目" 创建。 每个 NetContainer 包含一个或多个虚拟网络段,以及一个或多个网络服务,并且未来可能嵌入一个或多个 NetContainers。
NetContainers 可以基于已定义的 NC 规格或从头开始实例化。
NC 规格
NC 规格为云服务提供商提供了一种“打包”其产品的方式,
- 基于 Qos,例如:金牌、银牌或铜牌<
> * 指定应用程序/服务特定 NC 规格的规格,例如:符合 HIPAA 标准的网络<
> * 为特定租户或项目定义的简单网络资源,例如:项目用户允许创建多少个虚拟网络、最大 VM 数、支持的服务类型等。<
>
NC 规格设想类似于 VM 规格,例如 m1.tiny、m1.large 等。 将有默认的基本 NC 规格,可以根据特定项目需求进一步修改。
NC 插件:插件是网络设备/供应商特定的“包装器”,用于配置物理/虚拟交换机和服务所需的网络资源。
图 3 显示了 NaaS 及其分层模型的层次结构。 虽然 NetContainers 可以基于已定义的可用 NC 规格请求和实例化,但 NaaS 也会提供直接的 NaaS API 来请求具有细粒度参数的 NC,以提供灵活性。
在上面的图中,显示了网络段的逻辑表示。 云服务提供商 P1 与租户 T1,创建项目 Pr1,该项目托管应用程序 A1,具有三个虚拟网络 AT1、AT2 和 AT3。
所有 NetContainers 都应基于 NC 规格实例化。 一些规格将支持超出初始配置的修改,而另一些规格将锁定到最初实例化的相当严格的配置。 这取决于插件的功能,并为插件实现者提供了很大的灵活性。 提供更灵活容器的插件将具有优势,但这不会排除更基本的插件的用处。
图 4 显示了 OpenStack:Network 及其“网络设备”特定插件和各种 API 集。
NaaS API 的可访问性,在授权方面,将遵循与 OpenStack:Compute 相同的模型
API 集 1: NC API
这些 API 提供了为项目创建和“管理”NetContainers 的能力; * NetContainer 可以基于 CSP(云服务提供商)分配给该项目的 NC 规格定义/创建 * 附加/创建 Net Container 的虚拟网络 * 在“适当”的虚拟网络段“节点”处实例化/附加网络服务 * 查询/监控 NetContainer 健康状况 * 未来监控
API 集 2: 网络服务 API
这些是一组子集 API,使我们能够定义服务插入和服务的“引导”参数。
“配置/管理”服务本身不在此 API 集的范围内。 “配置/管理”每个服务是供应商特定的,并且很难将其全部对齐到一个模型下。 此外,每个服务可能都有自己的 SDK 和不同的部署模型来支持,这使得将其全部置于此集合中非常复杂。 但是,OpenStack 应为众所周知的服务(如防火墙、负载均衡器)提供“通用”网络服务配置。
使用此 API,租户可以
- 选择服务/类型服务,项目希望消耗和使用<
> * “自定义”服务 – 配置网络“插入”参数<
> * 列出/识别消耗的服务和健康状况<
>
API 集 3: NC 规格 API
这组 API 主要由 CSP 用于定义与网络和网络服务相关的“资源”/服务产品。 开放讨论:这些 API 在多大程度上可以进一步开放给项目/租户以自定义“规格”。
规格示例:三层应用程序,具有私有、公共虚拟网络,具有 FW 和 LB 服务,VPN GW 附加
使用此 API 集,CSP/租户可以: * 为项目和服务产品创建/管理模板。<
>
在下一节中,我们将讨论两个主要层,NaaS:Core 和 Naas:Plugins,如何交互及其各自的职责
组件职责
NaaS:Core
持有 NetContainer 实例的引用
- 提供容器配置 API <
> * 暴露可用 NetContainers 及其属性的目录 <
> * 允许对 NetContainers 进行操作/运行时控制 <
> * 讨论点:将计算/存储映射到容器? 或者计算服务是否管理? - 选项 1:NaaS 拥有连接,因此计算使用参数向 NaaS 注册 VM
- 选项 2:NaaS 向计算通告容器,计算管理连接
NaaS:Plug-ins
- 拥有可用的产品(哪些容器可用)<
> * 拥有将容器映射到网络设备环境(例如:网络段方案 – VLAN ID、QinQ 等)<
> * 拥有容器配置,包括资源分配、位置、服务等<
> * 支持标准但可扩展的格式,用于 !netcontainer 类型定义和 !netcontainer 实例请求<
> * 报告错误的标准方法,例如缺少信息、未知元素、无效配置等<
> * 查询特定容器类型的实际可用性的 API(了解哪些资源可用,哪些已被消耗)<
> * 处理与 NaaS:Core 的异步通信
用例
用例 1: 为 Openstack 项目创建一个网络资源
配置容器的工作流程
- 客户从 NaaS 产品中选择 !netcontainer 服务(如果有)<
> * 客户提供所需参数以指定配置偏好、策略等<
> * NaaS 从客户信息创建请求文档<
> * NaaS 将请求文档传递给插件<
> * 插件解析文档并映射到资源需求<
> * 插件根据可用资源评估资源需求<
> * 插件根据容器请求配置资源<
> * 插件返回新容器的句柄(REST URL)<
>
用例 2: 网络服务请求网络资源
- 防火墙的插入请求另一个内部虚拟网络和外部网络段
用例 3: 虚拟私有云/企业扩展
- 在 NC 中创建一个虚拟网络<
> * 创建 VPN/加速服务实例并将其附加到“私有”网络段<
>
用例 4: 网络调度器
- 支持多个 !OpenStack:Compute 区域并与 nova-scheduler 结合调度网络资源。
API 定义
这组 API 允许 Openstack 服务和“应用程序”请求网络容器、删除网络容器、修改网络容器 (NC) 属性、列出所有可用的 NC 规格并创建新的 NC 规格。 这些 API 由 Openstack 计算或其他服务以编程方式使用。
API 定义和数据模型将尝试遵循 Openstack:Compute API 1.1,如 https://docs.openstack.org/openstack-compute/developer/cs-devguide.pdf 中所述
JSON 是 OpenStack:Network APIs 的默认数据序列化方式。
身份验证
OpenStack: Network APIs 将遵循与 OpenStack:Compute 相同的身份验证模型,并且可能支持多种身份验证方案(OAuth、基本身份验证、令牌)等。
关键概念
租户:这可能映射到项目或组织,具体取决于调用 NaaS API 的系统。 这是一个唯一的名称/标签,用于标识 NC 的所有权。 租户可以映射到 Openstack:compute 服务调用的项目。 “数据服务”也可以使用租户结构来为存储相关服务创建网络容器。 这也使其能够应对 OpenStack:compute 和其他消费者应用程序/服务可能发生的更改,例如:OpenStack: Computer 从项目演变为 ORG/vDC/vApp 之类的结构。
规格:网络资源属性方面的容器定义。 例如:虚拟网络数量、附加的网络服务、未来的区域亲和性。
API 摘要 (正在进行中)
租户操作
| API 定义 | 请求 | 请求体 |
| 注册租户 | POST OpenStack:Networks API URL/config/tenant/create | 租户信息 |
| 注销租户 | GET OpenStack:Network API URL/config/tenant/UID/delete | 租户信息 |
| 列出租户 | GET OpenStack:Network API URL/tenants GET OpenStack:Network API URL/tenants/detail | |
示例: 创建租户
POST {APP-URI}/config/tenant/create
请求体
<tenant> <name>TenantABC1</name> <description>Optional description here</description> </tenant>
响应代码
- 201 Created – 租户已创建。 Location 标头提供已创建租户的 URL。<
>400 Bad Request – 请求存在问题,例如缺少数据 - 404 Not Found – 指定的 domainId 域未找到。
- 409 Conflict – 名称与现有租户冲突
NC 规格操作
| API 定义 | 请求 | 请求体 |
| 创建 NC 规格 | POST OpenStack:Networks API URL/config/ncflavor/create | NC 规格信息 |
| 修改 NC 规格 <actions> | ||
| 删除 NC 规格 | ||
| 列出 NC 规格 | GET OpenStack:Network API URL/ncflavors GET OpenStack:Network API URL/ncflavors/detail |
NetContainer 操作
| API 定义 | 请求 | 请求体 |
| 创建 NetContainer | POST OpenStack:Networks API URL/config/netcontainer/create | NetContainer 信息 |
| 修改 Net Container <actions> | ||
| 删除 Net Container | ||
| 列出 NetContainers | GET OpenStack:Network API URL/netcontainers GET OpenStack:Network API URL/netcontainers/detail |
网络服务附件
| API 定义 | 请求 | 请求体 |
| 附加服务 | 网络服务信息 | |
| 配置服务 <serviceUID> | ||
| 列出容器的服务 |
开放 问题
- NetContainers 定义 – 它与 OVF netspec 有何关系? 我们能重叠和利用 OVF 规范多少?<
> * 我们如何解决实例化 NC 或删除它时的“依赖关系”?<
> * 显式支持的服务枚举?<
> * 如何支持安全组之类的模型? 灵活性<
>
BoF 议程和讨论
使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。


