OpenStack Networking允许创建并管理网络、子网和端口等网络对象,其他OpenStack服务可以使用这些对象。可以实现插件以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。

目录

  1. 概念
    1. Provider networks
    2. Routed provider networks
    3. Self-service networks
      1. Flat
      2. VLAN
      3. GRE and VXLAN
    4. Subnets
    5. Subnet pools
    6. Ports
    7. Routers
    8. Security groups
    9. Extensions
    10. DHCP
    11. Metadata
  2. Service and component hierarchy(服务和组件层次结构)
    1. Server
    2. Plug-ins
    3. Agents
      1. Layer 2 (Ethernet and Switching)
      2. Layer 3 (IP and Routing)
      3. Miscellaneous
    4. Services
      1. VPNaaS
      2. LBaaS
      3. FWaaS

代号为neutron的网络服务提供了一个API,可让您在云中定义网络连接和寻址。 网络服务使运营商能够利用不同的网络技术为其云网络提供支持。 Networking服务还提供API,用于配置和管理各种网络服务,范围从L3转发和网络地址转换(NAT)到负载平衡,外围防火墙和虚拟专用网络。

neutron包括:

  • API server
    OpenStack Networking API包括对第2层网络和IP地址管理(IPAM)的支持,以及第3层路由器构造的扩展,该构造支持在第2层网络和网关之间路由到外部网络。OpenStack Networking包含越来越多的插件,可实现与各种商业和开源网络技术的互操作,包括路由器,交换机,虚拟交换机和软件定义网络(SDN)控制器。

  • OpenStack Networking插件和代理
    插拔端口,创建网络或子网,并提供IP寻址。所选插件和代理程序因特定云中使用的供应商和技术而异。一次只能使用一个插件。

  • 消息队列
    接受并路由代理之间的RPC请求以完成API操作。

概念

要配置富网络拓扑,可以创建和配置网络和子网,并指示其他OpenStack服务(如Compute)将虚拟设备连接到这些网络上的端口。OpenStack Compute是OpenStack Networking的主要消费者,为其实例提供连接。特别是,OpenStack Networking支持每个项目有多个专用的网络,并使项目能够选择自己的IP寻址方案,即使这些IP地址与其他项目使用的IP地址重叠。有两种类型的网络,项目网络和提供商网络。作为网络创建过程的一部分,可以在项目之间共享任何这些类型的网络。

Provider networks

Provider networks提供与实例的第2层连接,并可选择支持DHCP和元数据服务。这些网络连接或映射到数据中心中的现有第2层网络,通常使用VLAN(802.1q)标记来识别和分离它们。

提供商网络通常以灵活性为代价提供简单性、性能和可靠性。默认情况下,只有管理员可以创建或更新提供商网络,因为它们需要配置物理网络基础。更改允许创建或更新提供者网络的用户,可以使用policy.json的以下参数:

  • create_network:provider:physical_network
  • update_network:provider:physical_network

提供商网络的创建和修改会使用物理网络资源,例如VLAN-s。所以要受信任的项目启用这些更改。

此外,提供商网络仅处理实例的第2层连接,因此缺乏对路由器和浮动IP地址等功能的支持。

在许多情况下,已经熟悉依赖于第2层、第3层或其他服务的物理网络基础架构的虚拟网络架构的运营商可以无缝部署OpenStack Networking服务。特别是,那些希望从Compute网络服务(nova-network)迁移到OpenStack Networking服务的运营商。随着时间的推移,运营商可以在这个最小的架构上构建,以实现更多云网络功能。

通常,处理第3层操作的OpenStack Networking软件组件最能影响性能和可靠性。为了提高性能和可靠性,提供商网络将第3层操作移至物理网络基础架构。

在一个特定用例中,OpenStack部署位于混合环境中,该环境具有使用相当大的物理网络基础架构的传统虚拟化和bare-metal主机。在OpenStack部署中运行的应用程序可能需要对部署之外的应用程序进行直接的第2层访问(通常使用VLAN)。

Routed provider networks

路由提供商网络提供与实例的第3层连接。这些网络映射到数据中心的现有第3层网络。更具体地,网络映射到多个第2层段,每个第2层段基本上是提供商网络。每个都有一个连接到它的路由器网关,它在它们和外部之间路由流量。网络服务不提供路由。路由提供商网络提供大规模性能,这是通过普通提供商网络难以实现的,但代价是保证了第2层连接。

Self-service networks

自助服务网络主要使普通(非特权)项目能够在不涉及管理员的情况下管理网络。这些网络完全是虚拟的,需要虚拟路由器与提供商和外部网络(如Internet)进行交互。自助服务网络通常还为实例提供DHCP和元数据服务。在大多数情况下,自助服务网络使用Overlay协议(如VXLAN或GRE),因为它们可以支持比使用VLAN标记(802.1q)的第2层分段更多的网络。此外,VLAN通常需要额外配置物理网络基础结构。

IPv4自助服务网络通常使用专用IP地址范围(RFC1918),并通过虚拟路由器上的源NAT与提供商网络进行交互。浮动IP地址允许通过虚拟路由器上的目标NAT从提供商网络访问实例。IPv6自助服务网络始终使用公共IP地址范围,并通过具有静态路由的虚拟路由器与提供商网络进行交互。

Networking服务使用通常至少存在一个网络节点的第3层代理实现路由器。与将实例连接到第2层的物理网络基础架构的提供商网络相反,自助服务网络必须遍历第3层代理。因此,第3层代理或网络节点的超额订购或故障可能会影响大量的自助服务网络和使用它们的实例。考虑实施一个或多个高可用性功能,以提高自助服务网络的冗余和性能。

用户为项目内的连接创建项目网络。默认情况下,它们是完全隔离的,不与其他项目共享。OpenStack Networking支持以下类型的网络隔离和覆盖技术。

Flat

所有实例都驻留在同一网络上,也可以与主机共享。 不会发生VLAN标记或其他网络隔离。

VLAN

网络允许用户使用与物理网络中存在的VLAN对应的VLAN ID(802.1Q标记)创建多个提供商或项目网络。这允许实例在整个环境中相互通信。它们还可以与同一第2层VLAN上的专用服务器、防火墙、负载平衡器和其他网络基础架构进行通信。

GRE and VXLAN

VXLAN和GRE是封装协议,可创建覆盖网络以激活和控制计算实例之间的通信。需要网络路由器才能允许流量流向GRE或VXLAN项目网络之外。还需要路由器将直接连接的项目网络与外部网络(包括Internet)连接。路由器提供使用浮动IP地址直接从外部网络连接到实例的功能。

Subnets

IP地址块和关联的配置状态。这也称为网络服务为项目和提供商网络提供的本机IPAM(IP地址管理)。子网用于在网络上创建新端口时分配IP地址。

Subnet pools

最终用户通常可以创建具有任何有效IP地址的子网,而无需其他限制。但是,在某些情况下,管理员或项目可以预先定义一个地址池,从中创建具有自动分配的子网。使用子网池通过要求每个子网都在定义的池中来约束可以使用的地址。它还可以防止来自同一池的两个子网重用地址或重叠。

Ports

端口是用于将单个设备(例如虚拟服务器的NIC)连接到虚拟网络的连接点。该端口还描述了相关的网络配置,例如要在该端口上使用的MAC和IP地址。

Routers

路由器提供虚拟第3层服务,例如自助服务网络和提供商网络之间或某一项目的自助服务网络之间的路由和NAT。通过命名空间,Networking服务使用第3层代理管理路由器。

Security groups

安全组为虚拟防火墙规则提供容器,用于控制端口级别的入口(入站到实例)和出口(从实例出站)网络流量。安全组使用默认拒绝策略,仅包含允许特定流量的规则。每个端口可以以加性方式引用一个或多个安全组。防火墙驱动程序将安全组规则转换为基础数据包过滤技术(如iptables)的配置。

每个项目都包含一个默认安全组,允许所有出口流量并拒绝所有入口流量。可以更改默认安全组中的规则。如果在未指定安全组的情况下启动实例,则默认安全组会自动应用于该安全组。同样,如果在未指定安全组的情况下创建端口,则默认安全组会自动应用于该端口。

如果使用元数据服务,则删除默认出口规则来拒绝访问169.254.169.254上的TCP端口80,从而阻止实例检索元数据。

安全组规则是有状态的。因此,允许入口TCP端口22用于安全shell自动创建允许返回涉及那些TCP连接的出口流量和ICMP错误消息的规则。

默认情况下,所有安全组都包含一系列执行以下操作的基本(完整性)和反欺骗规则:

  • 仅当出口流量使用实例端口的源MAC和IP地址,允许地址对中的源MAC和IP组合,或有效MAC地址(端口或允许地址对)和相关的EUI64本地链路地址时,才允许出口流量。
  • 允许egress DHCP发现并请求的消息,来使用实例端口的源MAC地址和未指定的IPv4地址(0.0.0.0)
  • 允许ingress来自子网上DHCP服务器的DHCP和DHCPv6响应,以便实例可以获取IP地址。
  • 拒绝egress DHCP和DHCPv6响应以防止实例充当DHCP(v6)服务器。
  • 允许ingress/egress ICMPv6 MLD,邻居请求和邻居发现消息,以便实例可以发现邻居并加入多播组。
  • 拒绝egress ICMPv6路由器通告,以防止实例充当IPv6路由器并为其他实例转发IPv6流量。
  • 允许egress ICMPv6 MLD报告(v1和v2)以及使用特定实例的源MAC地址和未指定的IPv6地址(::)的邻居请求消息。重复地址检测(DAD)依赖于这些消息。
  • 允许egress从实例端口的MAC地址的非IP流量,并允许实例端口上的允许地址对中的任何其他MAC地址。

虽然非IP流量,但安全组不会隐式允许所有ARP流量。单独的ARP过滤规则可防止实例使用ARP拦截另一个实例的流量。您无法禁用或删除这些规则。您可以通过将端口属性port_security_enabled设置为False来禁用安全组,包括基本规则和反欺骗规则。

Extensions

OpenStack Networking服务是可扩展的。扩展有两个目的:它们允许在API中引入新功能而无需更改版本,并且它们允许引入供应商特定的利基功能。应用程序可以通过在/extensions URI上执行GET以编程方式列出可用扩展。请注意,这是一个版本化请求;也就是说,一个API版本中可用的扩展可能在另一个API版本中不可用。

DHCP

可选的DHCP服务管理提供商和自助服务网络上的实例的IP地址。Networking服务使用管理qdhcp命名空间和dnsmasq服务的代理实现DHCP服务。

Metadata

可选的元数据服务为实例提供API以获取诸如SSH密钥之类的元数据。

Service and component hierarchy(服务和组件层次结构)

Server

  • 提供API,管理数据库等。

Plug-ins

  • 管理代理。

Agents

  • 提供与实例的第2/3层连接。
  • 处理物理 - 虚拟网络转换。
  • 处理元数据等。
Layer 2 (Ethernet and Switching)
  • Linux Bridge
  • OVS
Layer 3 (IP and Routing)
  • L3
  • DHCP
Miscellaneous
  • Metadata

Services

Routing services

VPNaaS

虚拟专用网络即服务(Virtual Private Network-as-a-Service)是一种引入VPN功能集的neutron extension。

LBaaS

负载均衡即服务(Load-Balancer-as-a-Service)API提供并配置负载平衡器。参考实现基于HAProxy软件负载均衡器。

FWaaS

防火墙即服务(Firewall-as-a-Service)API是一种实验性API,使早期采用者和供应商能够测试其网络实施。