专栏首页大魏分享(微信公众号:david-share)非网络专业人士看NSX--浅谈NSX架构和ARP压制

非网络专业人士看NSX--浅谈NSX架构和ARP压制

一直以来,网络方面都不是笔者的强项,来了VMware以后,由于工作的需要,经常和客户一起交流NSX,有一些心得,自己也查了一些资料,更请教过我司的网络方面的专家,如Alex You、Rick Chen、Wu WanLi同学,在此对给予的帮助表示感谢!

本篇文章,我将从非网络专业人士角度分享对NSX理解,以及我被客户最多问到的问题:NSX如何避免广播风暴。

  • NSX的由来

2013年,VMware收购NSX的前身Nicira。该公司发明了OpenStack中的网络组件,这段历史不再赘述。NSX的名字怎么来的?我们知道,VMware的起家产品vSphere的核心是ESXi,那么ESXi的名字含义是什么?

ES for Elastic Sky(一个乐队的名称),X for any,i for internal.

VMware想把NSX做成网络界的ESXi,因此最终命名为NSX(N forNetwork)。

  • NSX的架构

NSX提供OSI 3-7层网络虚拟化。NSX结合VDS,实现的是2-7层的网络虚拟化。没有NSX的话,vSphere只提供二层网络虚拟化。

没错,上面这张图,乍一看,很复杂。我们从左向右进行分析。

该图最左边一列,讲的是NSX的三个层面:数据平板、控制平面、管理平面。顾名思义,数据平面负责负责数据实际传输,控制平面负责协议控制,管理平面负责NSX整体管理和配置。

在正式开始介绍之前,需要解释清楚几个概念,这几个概念都是NSX范畴的,千万不要和vSphere中的VSS和VDS搞混:

分布式逻辑交换机=NSX virtual switch=Logical Switch

它的“落脚点”是vSphere中VDS的一个PortGroup。我们知道在vSphere中,中,portgroup可以用于隔离vLan,在NSX中,一个NSX virtual switch将相当于一个VXLAN。因此NSX virtual switch(逻辑交换机)和vSphere中的VDS和VSS是完全不同的。

分布式逻辑路由器=NSX router(东西流量)

分布式逻辑防火墙=NSX firewall(东西流量)

分布式负载均衡器=NSX load balancer

VTEP:A Virtual Tunnel End Point (VTEP). 用于多VXLAN报文进行封装/解封装。一个主机可能有多个VTEP实例。VTEP的安装程序只有一个,位于每个ESXi上(就是VIB中的VXLAN)。

VTEP实例的落脚点也是一个VDS端口组,但只是一个管理的端口组,不需要虚拟机去连。VETP的IP地址落脚点是VMkernel网络。VTEP实例不能手工创建,有多少个实例取决于负载。

在NSX实际安装配置的时候,只有控制平面的NSX Manager需要安装,其它组件或是由NSX Manager推送,或是在NSX Manager界面进行手工配置。

(1) 数据平面

NSX的数据平面是在esxi内核中(通过推送VIB),VIB(vSphereInstallation Bundle)包含三个组件:VXLAN、分布式逻辑路由器、分布式逻辑防火墙。

数据平面除了VIB的三个模块以外,还有NSX EDGE。NSX EDGE不在VIB中,NSX EDGE的“落脚点”是一个虚拟机。VIB的三个组件受NSX controller控制,而是直接受NSX Manager控制。NSX EDGE虚拟机有10个虚拟网卡(vSphere虚拟机的限制,所以一个EDGE最多有10个接口)。NSX EDGE主要有两个功能:防火墙和路由器。它与VIB中的防火墙和路由器有什么区别呢?区别是:VIB中的NSX防火墙是分布式的,负责东西流量,NSX EDGE中的防火墙是集中式的,负责南北流量。EDGE的路由器也是负责南北向的。

(2)控制平面

控制平面的核心组件包括NSX逻辑路由器的control VM,还有NSX controller。生成一个NSX路由器就会自动创建一个controller VM,它对路由器的信息进行控制。真的数据传输通过数据板。补充说明的是,创建NSX 路由器,也可以不生成control VM,但是这样创建出来的NSX路由器只能走静态路由协议,不能支持BGP和OSPF。

NSX Controller:最少部署一个,一般建议部署三个。三个控制器自动做负载均衡。有一个坏了以后,其它两个分担。需要注意的是,在实际配置过程中,笔者做过尝试,创建多余三个的NSX controller可以,但这种不被VMware官方所支持。Controller中存在三张表:ARP MAC,VTEP。

UWA:做数据传输和消息传递。通过NSX manager自动推送。UWA与NSX Controller进行通讯,并且将ESXi上VM的MAC,ARP, VTEP定期表更新到NSX controller中。

(3)管理平面

管理平面的核心是NSX Manager。NSX manager是整个NSX体系中实际需要安装的组软件。NSX Manager与vCenter集成。它干几个活:管理三个NSX controller,管理NSX EDGE、为用户提供NSX管理和配置接口。

  • ARP压制

广播风暴的问题,是很多朋友关心的。为了减少广播行为, NSX提供了ARP压制的功能,从而很大程度上避免了传统二层网络出现的风暴。ARP压制功能在NSX逻辑交换机上启用。如下图,选中“Enable IP Discovery”。

概括来讲,在NSX中,当VM加入到NSX逻辑交换机时,VTEP会将该VM的MAC, IP,ARP信息注册到NSX Controller中。然后NSX controller将表的信息复制到相关的VTEP上(ESXi)。

虚拟机发起ARP请求时,首先会查看本ESXi上的ARP表信息,如果没有,ARP请求会发往Controller,如果Controller ARP表有相应的信息,将会直接反馈给虚拟机。如果Controller此时的ARP中没有虚拟机请求的信息,那么ARP请求将会按照单播/组播/混合的模式,通过VTEP,在VMKernel网络上进行传输,并且请求只会发送到和NSX逻辑交换机相关的ESXi上(比如ARP需要获取的是VNI 6000网络里的ARP信息,那么请求就只会发给和6000相连接的ESXi)。

也就是说,正是由于NSX Controller的存在以及学习机制,大大减少了NSX网络中的广播行为,才使NSX网络中的网络风暴问题要大大少于传统物理网络。

在NSX里,TransportZone中控制板模式可以配置成单播模式、组播模式,或者混合模式。

单播模式:

组播模式:

混合模式

我们举一个实际的例子,来说明ARP压制是如何起作用的:

在正在介绍例子之前,先介绍一个组件:VXLAN SwSec module,它是ARP压制的实现模块。它是一种dvFilter,依附与VM的虚拟网卡上。SwSec在一定条件下,会主动向controller发起ARP表更新。

当一个虚拟机连接一个NSX逻辑交换机的时候,它需要经过几个安全服务,其中就包含SwSec。

SLOT 0 : implement vDS Access List

SLOT 1: Switch Security module (swsec) capture DHCP Ack and ARP message, this info then forward to NSX Controller.

SLOT2: NSX Distributed Firewall.

SwSec将在什么情况下向控制器发起ARP信息更新呢?

(1) 当它收到了一个ARP请求

(2) 当SwSec所在的VM向DHCP Server发起的请求进行响应时(DHCP ACK)

NSX实验环境里有两个ESXi,上面分别有两个VM:

ESXi1上的VM1连接到VNI5000(VXLAN);

172.16.10.11 00:50:56:a6:7a:a2

ESXi2上的VM2也连接到VNI5000;

172.16.10.12 00:50:56:a6:a1:e3 6

开始的时候,所有的ESXi ARP表和缓存都都空的:

ESXi-1

# net-vdl2 -M arp -s Compute_VDS -n 5000ARP entry count: 0~ # net-vdl2 -M mac -s Compute_VDS -n 5000MAC entry count: 0

ESXi-2

~ # net-vdl2 -M arp -s Compute_VDS -n 5000ARP entry count: 0~ # net-vdl2 -M mac -s Compute_VDS -n 5000MAC entry count: 0

这个时候,VM1向VM2发起ping。

在ESXi-1上,ARP请求将会被Switch Security module (SwSec), 捕获,然后送至NSX controller,询问controller是知道VM2的MAC和IP地址对应关系。

--> ARP (v4) Query:len = 16

--> SwitchID:0,VNI:5000

--> Num of entries:1

--> #0 VM IP:172.16.10.12 与此同时, VM1的MAC和IP地址对应关系也会主动传递给控制器。

--> VM IP (v4) Update: len = 24

--> SwitchID:0, VNI:5000

--> Num of removed entries: 0

--> Num of added entries: 1

--> #0 VMIP:172.16.10.11 VM MAC:00:50:56:a6:7a:a2

如果此时controller没有缓存VM2的MAC和IP地址对应关系,它会告诉回复给VM1,“我不知道”.

--> ARP (v4) Update: len = 32 --> SwitchID:0, VNI:5000 --> Num of entries: 1 --> #0 VMIP:172.16.10.12 VMMAC:ff:ff:ff:ff:ff:ff VTEPIP:255.255.255.255 VTEP MAC:ff:ff:ff:ff:ff:ff 此时,ESXI-2上的SwSec发现有虚拟机在请求VM2的ARP信息,它就会主动把VM2的ARP信息发给controller。 --> VM IP (v4) Update: len = 24 --> SwitchID:0, VNI:5000 --> Num of removed entries: 0 --> Num of added entries: 1 --> #0 VMIP:172.16.10.12 VM MAC:00:50:56:a6:a1:e3

ESXi上地址表将会更新如下,

ESXi-1:

~ # net-vdl2 -M arp -sCompute_VDS -n 5000

ARP entrycount: 1

IP: 172.16.10.12

MAC: ff:ff:ff:ff:ff:ff <== “我不知道” 第一次ARP controller的返回值。

Flags: F

ESXI-2

~ # net-vdl2 -M arp -sCompute_VDS -n 5000

ARP entrycount: 0 <== 没有学习到,因为VM2并没有尝试向controller询问VM1的ARP信息

但此时,controller已经学习到了VM1和VM2的ARP信息:

nvp-controller # showcontrol-cluster logical-switches arp-table 5000

VNI IP MAC Connection-ID

5000 172.16.10.12 00:50:56:a6:a1:e3 6

5000 172.16.10.11 00:50:56:a6:7a:a2 7

这样,而当VM1如果再次发起对VM2的ping请求时,controller就会将VM2的信息反馈给VM。这样一个完整的ARP学习过程就完成了。

本文分享自微信公众号 - 大魏分享(david-share),作者:魏新宇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java学习笔记第一篇:坦克大战游戏

    一、Java学习笔记系列 笔者大学时候学的编程语言是C和汇编,毕业以后并未从事过开发工作,也没有接触过Java。但近两年的PaaS、CI/CD主要是以Java应...

    魏新宇
  • 通过Swagger管理API:API Management学习第一篇

    3 Scale有个很好的功能,它提供ActiveDocs实时文档。它基于Swagger框架,提供了一种记录API的方法,并包含在Developer Portal...

    魏新宇
  • 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇终结(第3子篇)

    VIOC 上的 VSCSI 性能调优 在本实验的 VIOC 中,一个磁盘对应 4 条 VSCSI 路径。查看磁盘默认的属性 ; # lsattr -El hdi...

    魏新宇
  • SDN实战团分享(四):从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨

    大家好,我叫范恂毅,现在在阿尔卡特朗讯企业通信(ALE)担任售前。我首先说明一句,我的公司,我们的业务,与VMware NSX没有直接关系。我研究NSX技术,纯...

    SDNLAB
  • scanf的一些技巧

      scanf("%s",string); //当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是不能接受回车,空格和tab键,他们仍会留在输入的缓...

    饶文津
  • Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)

    这两天,Bruce Eckel来到中国,这是他的中国首秀。5月22日,Bruce Eckel发表了他的最新演讲,与在场的1000多人分享关于编程语言的一些思考,...

    华章科技
  • SpringCloud实战: Feign<上>

    很多使用spring cloud 主要是注册中心,动态配置中心,服务调用,负载均衡,熔断,网关。Feign是一个声明式的Web Service客户端,整合了注解...

    用户4143945
  • webpack4配置详解之慢嚼细咽

    经常会有人会问起 webpack、 react、 redux、甚至 create-react-app配置等等方面的问题,有些是我也不懂的,慢慢从大家的相互交流中...

    前端迷
  • 使用commons-pool管理FTP连接

    在封装一个FTP工具类文章,已经完成一版对FTP连接的管理,设计了模板方法,为工具类上传和下载文件方法的提供获取对象和释放对象支持。

    用户3579639
  • 图解 Java 垃圾回收机制,写得非常好!

    自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。

    美的让人心动

扫码关注云+社区

领取腾讯云代金券