Keep learning, keep living...

0%

NSX分布式逻辑路由器介绍

NSX是VMware公司在vSphere平台上的网络虚拟化解决方案。从架构上分为四层, 如图:

  • 消费平面: 云管平台CMP(Cloud Management Platform)不是NSX的组件,NSX提供了丰富的REST API, 可根据需要集成NSX。
  • 管理平面: NSX Manager是NSX的集中管理器,主要功能包括管理NSX Controller集群,管理EDGE节点,为上层消费平台提供管理和配置接口。NSX Manager自身实现了vSphere vCenter插件,可注册在vCenter中,通过GUI进行管理。
  • 控制平面: 控制平台主要包括NSX Controller集群,Controller负责维护所有ESXi主机、逻辑交换机(Logical Switch)和分布式逻辑路由器(DLR: Distributed Logical Router)的信息。实际上,控制平面还包括DLR的Control VM, 上图中没有体现。上图来自官方6.4版本的文档。后文会再介绍它的作用。
  • 数据平面: 数据平面主要包括NSX Virtual Switch, DLR, 和ESG: Edge Service Gateway。按图中表示,NSX Virtual Switch是基于vSphere的分布式交换机并在内核中实现VXLAN、防火墙过滤、分布式路由等功能的逻辑交换机。我个人更倾向将NSX Virtual Switch理解为VDS+VXLAN实现,将DLR看成独立组件。VDS可以理解为基于VLAN隔离的虚拟交换机,NSX Virtual Switch是基于VXLAN隔离的虚拟交换机。NSX界面上,NSX Virtual Switch叫做逻辑交换机: Logical SwitchDLRESG都是路由器,DLR负责虚拟数据中心中东西向流量路由,ESG负责虚拟数据中心边缘的南北向流量路由。其他数据面组件都在ESXi主机内核中实现,而ESG是独立的虚拟机。 NSX的一个典型逻辑网络架构如下图:

从逻辑架构上看,与OpenStack等其他的虚拟化网络方案没有太大差别。但NSX比较独特的地方在于DLR的实现。DLR的主要作用是完成虚拟数据中心内东西向流量路由。为了避免同一台ESXi主机的两个VM之间的流量需要先出宿主机经过虚拟路由再回到宿主机,如下图所示:

DLR实现在每台ESXi内核实现一个DLR实例,由它负责本机上VM的流量的路由。这样上述流量就不再出宿主机,直接由本地DLR转发到本地的目的VM,如下图:

除了ESXi主机上的DLR实例负责数据面,在创建DLR时,还可以创建一个DLR Control VM, 它负责路由信息的生成和管理。如果不创建Control VM, 则DLR只能配置静态路由。创建Control VM之后,则可以通过它和EDGE路由之间运行动态路由协议(如,OSPF、BGP)来学习路由,再将路由信息推送到NSX Controller, NSX Controller再推送到所有DLR实例。

我的NSX实验环境按上图构建虚拟网络后的实际结构如图:

其中,DLR Control VM通过transit网络与ESG建立动态路由邻居关系,另一个接口接入DLR_MGMT是由于HA需要,它并没有与NSX Controller网络可达的通路,那么它是如何实现将路由信息推送给NSX Controller呢?事实上,它是通过VMware的VMCI: Virtual Machine Communication Interface通道实现的。

VMCI提供了一种Guest虚拟机与宿主机上的进程通信的通道。整个通信过程如图:

DLR Controll VM将信息发送给本地ESXi主机上的netcpad进程, 该进程通过ESXi的管理接口将信息再发送给NSX Controller, NSX Controller再推送到所有其他的ESXi主机的netcpad进程,netcpad进程再将路由信息写入DLR实例。

要彻底弄懂NSX需要大量实践。Google上关于NSX的资料非常多,关于NSX部署安装可以参考:

默认情况下,部署完的ESG包含一个内置的防火墙规则,会阻断所有要从ESGuplink口进入的流量。我们需要在防火墙规则中去自定义规则去放开我们想要的流量。但6.4.5的NSX Manager插件GUI在HTML5和Flex版本上的防火墙操作是不一致的,HTML5版本上都需要到防火墙页面中去操作而不是在ESG自身的设置页面来配置。

参考链接: