使用 Neutron
OpenStack 的网络解决方案 Neutron 具有具有代表性的网络 (VirtualNetwork)、端口 (VirtualMachineInterface)、子网 (IpamSubnets) 和安全组的 Contrail 元素。Neutron 插件将元素从一种表示形式转换为另一种表示形式。
数据结构
尽管 Neutron 和 Contrail 之间的实际数据相似,但元素列表却有很大不同。在 Contrail API 中,网络元素列表是一个摘要,仅包含 UUID、FQ 名称和 href,但在 Neutron 中,每个资源的所有详细信息都包含在列表中。
Neutron 插件的列表检索操作效率低下,尤其是在大规模上,因为它:
读取资源列表(例如),
GET /virtual-networks
然后迭代并读取资源 (
GET /virtual-network/<uuid>
) 的详细信息。
因此,API 服务器在这种类型的 GET 操作中花费了大部分时间,只是等待来自 Cassandra 数据库的结果。
Contrail 中的以下功能可通过 Neutron 提高性能:
在集合的 GET 中添加了可选的详细信息查询参数,以便 API 服务器返回列表中所有资源的详细信息,而不仅仅是摘要。与此同时,Contrail API 库也会发生变化,以便向调用方返回对象列表。
现有 Contrail 列表 API 可采用可选
parent_id
查询参数,以返回有关父级锚定的资源的信息。Contrail API 服务器以 multiget 格式将对象从 Cassandra 读入
obj_uuid_cf
,其中存储对象内容,而不是以 xget/get 格式读取。这样可以减少往返 Cassandra 数据库的次数。
Neutron 中的网络共享
使用 Neutron,部署人员可以使用网络上的两个属性之一,使网络可供其他租户或项目访问:
shared
将属性设置为允许共享router:external
当插件支持external_net
扩展时,设置属性
使用共享属性
当网络设置了 shared
属性时,其他租户或项目中的用户(包括非管理员用户)可以使用以下方法访问该网络:
neutron net-list --shared
用户还可以使用以下操作直接在该网络上启动虚拟机:
nova boot <other-parameters> –nic net-id=<shared-net-id>
使用 Router:External 属性
当网络设置了 router:external
属性时,其他租户或项目中的用户(包括非管理员用户)可以使用该网络分配浮动 IP,方法是:
neutron floatingip-create <router-external-net-id>
然后将 IP 地址池与其实例相关联。
托管 FIP 池的 VN 应标记为“共享”和“外部”。
用于 Neutron 网络共享的命令
下表总结了 Contrail 最常用的 Neutron 命令。
行动 |
命令 |
---|---|
列出所有共享网络。 |
|
创建具有共享属性的网络。 |
|
在现有网络上设置共享属性。 |
|
列出所有 |
|
创建具有该属性的 |
|
|
|
支持 Neutron API
OpenStack Neutron 项目在由 OpenStack 计算服务管理的设备之间提供虚拟网络服务。软件开发人员使用 OpenStack 网络 API v2.0 (Neutron) 创建应用。
Contrail 提供以下功能来增强对 OpenStack Neutron 的支持:
独立于虚拟机创建端口。
支持虚拟网络上的多个子网。
支持子网上的分配池。
按租户配额。
在子网上启用 DHCP。
外部路由器可用于浮动 IP。
有关使用 OpenStack Networking API v2.0 (Neutron) 的更多信息,请参阅: http://docs.openstack.org/api/openstack-network/2.0/content/ 和 OpenStack Neutron Wiki,网址为: http://wiki.openstack.org/wiki/Neutron。
Contrail Neutron 插件
Contrail Neutron 插件为以下核心资源提供了实施:
网络
子
港口
它还实现了以下标准和上游的 Neutron 扩展:
安全组
路由器 IP 和浮动 IP
按租户配额
允许的地址对
已实施以下特定于 Contrail 的扩展:
网络 IPAM
网络策略
VPC表和路由表
浮动 IP 池
该插件不实现原生批量、分页或排序操作,而是依赖于 Neutron 通用代码提供的仿真。
DHCP 选项
在 Neutron 命令中,可以使用 port-create 中的 extra-dhcp-options 配置 DHCP 选项。
例
neutron port-create net1 --extra-dhcp-opt opt_name=<dhcp_option_name>,opt_value=<value>
可以使用的 opt_name 和 opt_value 对在 GitHub: https://github.com/Juniper/contrail-controller/wiki/Extra-DHCP-Options 中维护。
不兼容
在 Contrail 架构中,已知存在以下与 Neutron API 不兼容的问题。
不支持基于资源中的任何任意键进行筛选。唯一支持的过滤是 by
id, name,
和tenant_id
。要使用浮动 IP,无需将公有子网和私有子网连接到 Neutro n 路由器。用标记公共网络
router:external
足以创建和关联浮动 IP,并且数据包转发到该 IP 将正常工作。配额的默认值来自 /etc/contrail/contrail-api.conf ,而不是来自 /etc/neutron/neutron.conf。