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 Switch
。DLR
和ESG
都是路由器,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
包含一个内置的防火墙规则,会阻断所有要从ESG
的uplink
口进入的流量。我们需要在防火墙规则中去自定义规则去放开我们想要的流量。但6.4.5的NSX Manager插件GUI在HTML5和Flex版本上的防火墙操作是不一致的,HTML5版本上都需要到防火墙
页面中去操作而不是在ESG
自身的设置页面来配置。
参考链接:
- http://www.vexpertconsultancy.com/2018/05/nsx-v-distributed-logical-router-with-or-without-control-vm/
- https://www.routetocloud.com/2014/06/nsx-distributed-logical-router/
- http://bradhedlund.com/2013/11/20/distributed-virtual-and-physical-routing-in-vmware-nsx-for-vsphere/
- http://chansblog.com/6-nsx-distributed-logical-router/
- https://networkinferno.net/nsx-compendium