5.5. 网络
OpenStack 网络服务(neutron)使最终用户或项目能够定义和使用网络资源。除了编排网络配置外,OpenStack 网络还提供面向项目的 API,用于为云中的实例定义网络连接和 IP 寻址。过渡到以 API 为中心的联网服务后,云架构师和管理员应考虑保护物理网络基础架构和服务的良好做法。
OpenStack 网络设计为一个插件架构,通过开源社区或第三方服务提供 API 的可扩展性。在评估您的架构设计需求时,务必要确定 OpenStack 网络核心服务中提供的哪些功能、第三方产品所提供的任何其他服务,以及在物理基础架构中实施哪些补充服务。
本节是实施 OpenStack 网络时应考虑哪些流程和良好实践的高级概述。
5.5.1. 网络架构 复制链接链接已复制到粘贴板!
OpenStack 网络是一种独立服务,可在多个节点上部署多个进程。这些进程与其他 OpenStack 服务和其他 OpenStack 服务交互。OpenStack 网络服务的主要进程是 neutron-server,它是一个 Python 守护进程,它公开 OpenStack 网络 API,并将项目请求传递到一组用于额外处理的插件。
OpenStack 网络组件包括:
-
Neutron 服务器(
neutron-server和neutron-*-plugin) - neutron-server 服务在 Controller 节点上运行,以服务网络 API 及其扩展(或插件)。它还强制执行每个端口的网络模型和 IP 寻址。neutron-server 需要直接访问持久数据库。代理可通过 neutron-server 间接访问数据库,以便使用 AMQP (高级消息队列协议)进行通信。 - Neutron 数据库 - 数据库是 neutron 信息的集中式来源,API 会记录数据库中的所有事务。这允许多个 Neutron 服务器共享同一个数据库集群,将它们保持同步,并允许持久性网络配置拓扑。
-
插件代理(
neutron-*-agent) - 在每个计算节点上运行,以及 L3 和 DHCP 代理(与 L3 和 DHCP 代理一致)来管理本地虚拟交换机(vswitch)配置。enabled 插件决定启用哪些代理。这些服务需要消息队列访问,具体要看所使用的插件、访问外部网络控制器或 SDN 实施。某些插件,如 OpenDaylight (ODL)和 Open Virtual Network (OVN),不需要计算节点上任何 python 代理,只需要为集成需要启用的 Neutron 插件。 -
DHCP 代理(
neutron-dhcp-agent) - 为项目网络提供 DHCP 服务。这个代理在所有插件中都相同,它负责维护 DHCP 配置。neutron-dhcp-agent 需要消息队列访问。根据插件的可选功能。 -
元数据代理(
neutron-metadata-agent,neutron-ns-metadata-proxy) - 提供用于应用实例操作系统配置和用户提供的初始脚本(用户数据)的元数据服务。实施需要 L3 或 DHCP 代理命名空间中运行的neutron-ns-metadata-proxy截获 cloud-init 发送的元数据 API 请求,以代理到元数据代理。 -
L3 代理(
neutron-l3-agent) - 为项目网络上虚拟机的外部网络访问提供 L3/NAT 转发。需要消息队列访问。根据插件的可选功能。 - 网络提供程序服务(SDN server/services) - 为项目网络提供额外的网络服务。这些 SDN 服务可以通过 REST API 等通信通道与 neutron-server、neutron-plugin 和 插件代理交互。
下图显示了 OpenStack 网络组件的架构和网络流程图:
请注意,当使用分布式虚拟路由(DVR)和第 3 层高可用性(L3HA)时,这种方法会有很大变化。这些模式会改变 neutron 的安全状况,因为 L3HA 在路由器之间实现 VRRP。部署需要正确调整并强化,以帮助缓解对路由器的 DoS 攻击,而且路由器之间的本地网络流量必须被视为敏感,以帮助解决 VRRP 欺骗的威胁。DVR 将网络组件(如路由)移到 Compute 节点,同时仍然需要网络节点。因此,计算节点需要访问公共网络或从公共网络进行访问,增加其暴露,并要求客户进行额外的安全性考虑,因为需要确保防火墙规则和安全模型支持此方法。
5.5.1.1. Neutron 服务在物理服务器上放置 复制链接链接已复制到粘贴板!
本节介绍了包括控制器节点、网络节点以及一组用于运行实例的计算节点的标准架构。要为物理服务器建立网络连接,典型的 neutron 部署最多可有四个不同的物理数据中心网络:
- 管理网络 - 用于 OpenStack 组件之间的内部通信。此网络上的 IP 地址应该只能在数据中心访问,并被视为管理安全区域。默认情况下,管理网络角色由 内部 API 网络执行。
- 客户机网络 - 用于云部署中的虚拟机数据通信。此网络的 IP 寻址要求取决于所使用的 OpenStack 网络插件,以及项目所提出的虚拟网络的网络配置选择。此网络被视为客户机安全区域。
- 外部网络 - 在一些部署场景中用于为虚拟机提供互联网访问功能。此网络上的 IP 地址应该可以被 Internet 上的任何人访问。此网络被视为在公共安全区中。该网络由 neutron External networks 提供。这些 neutron VLAN 托管在外部网桥上。它们不是由 Red Hat OpenStack Platform director 创建,而是在部署后由 neutron 创建。
- 公共 API 网络 - 将所有 OpenStack API (包括 OpenStack 网络 API)公开给项目。此网络上的 IP 地址应该可以被 Internet 上的任何人访问。这可能与外部网络相同,因为可以为外部网络创建子网,它使用 IP 分配范围小于 IP 块中的完整 IP 地址范围。此网络被视为在公共安全区中。
建议您将此流量划分为不同的区。如需更多信息,请参见下一节。