(图1, 来源:Cisco 网站。 TOR:Top On Rack 交换机。图中的一个服务器有三块网卡,分别连到连接数据网络和管理网络的交换机。)
而云架构往往是多租户架构,这意味着多个客户会共享单一的物理网络。因此,除了提供基本的网络连接能力以外,云还需要提供网络在租户之间的隔离能力;同时云是自服务的,这意味着租户可以通过云提供的 API 来使用虚拟出的网络组建来设计,构建和部署各种他们需要的网络。
(左图-图3: 计算虚拟化和网络虚拟化。来源) (右图-图4:来源 MidoNet 提供的物理网络和逻辑网络的映射)
OpenStack 云也不例外。 OpenStack 通过 Neutron 项目在物理网络环境之上提供满足多租户要求的虚拟网络和服务。Neutron 提供的网络虚拟化能力包括:
(1)二层到七层网络的虚拟化:L2(virtual switch)、L3(virtual Router 和 LB)、L4-7(virtual Firewall )等
(2)网络连通性:二层网络和三层网络
(3)租户隔离性
(4)网络安全性
(4)网络扩展性
(5)REST API
(6)更高级的服务,包括 LBaaS,FWaaS,VPNaaS 等。具体以后再慢慢分析。
2. Neutron 网络虚拟化在实际的数据中心中,网络可以分为三层:OpenStack Cloud network,机房intranet (external network),以及真正的外部网络即 Internet。External 网络和Internet 之间是数据中心的 Uplink 路由器,它负责通过 NAT 来进行两个网络之间的IP地址(即 floating IP 和 Internet/Public IP)转换,因此,这部分的控制不在 OpenStack 控制之下,也不在本文的主要探讨范围之内。
OpenSack Cloud network:OpenStack 所管理的网络。
External network:数据中心所管理的的公司网(Intranet) ,虚机使用的 Floating IP 是这个网络的地址的一部分。
Internet:由各大电信运营商所管理的公共网络,使用公共IP。
这是 RedHat 提供的一个 OpenStack Cloud network 网络架构:
大概地分类的话,该网络管理网络 和 数据网络,数据网络中关键的是租户网络,用于租户虚机之间的通信。这部分也是 Neutron 所实现的网络虚拟化的核心。在目前的Neutron 实现中,Neutron 向租户提供虚拟的网络(network)、子网(subnet)、端口 (port)、交换机(switch)、路由器(router)等网络组件。下图显示了虚拟网络和物理网络的映射关系:
(图5.来源:2015 OpenStack技术大会-Neutron云计算网络虚拟化-龚永生.pdf)
2.1 网络(L2 network)网络(network)是一个隔离的二层网段,类似于物理网络世界中的虚拟 LAN (VLAN)。更具体来讲,它是为创建它的租户而保留的一个广播域,或者被显式配置为共享网段。端口和子网始终被分配给某个特定的网络。这里所谓的隔离,可以理解为几个含义:
跨网络的子网之间的流量必须走 L3 Virtual Router
每个网络使用自己的 DHCP Agent,每个 DHCP Agent 在一个 Network namespace 内
不同网络内的IP地址可以重复(overlapping)
根据创建网络的用户的权限,Neutron network 可以分为:
Provider network:管理员创建的和物理网络有直接映射关系的虚拟网络。
Tenant network:租户普通用户创建的网络,物理网络对创建者透明,其配置由 Neutorn 根据管理员在系统中的配置决定。