SDN实战团分享(二十三):OpenStack中MPBGP EVPN VxLan网络理论与实践

分享正文

今天和大家一起讨论下 VxLan 在 OpenStack 中的使用演变。大概会介绍 Neutron 的 L2 Pop 和 BaGPipe,早期的 VxLan 与现在的 MP-BGP EVPN VxLan

我们先从一个比较简单的中小型企业的使用 Neutron 参考网络模型 OpenStack 使用场景来看。大概是这样的,计算节点上起 VTEP,通过 VxLan 跑数据平面,如果有企业内网通信的需求,那么可以用虚拟路由器做 L2 Gateway,但是问题很多。

简单说下原理,首先我们基于 OVS 实现的 VxLan 隧道由 Neutron 收集所有 Agent 来 建立 VxLan 隧道,然后 VTEP 因为不知道其后的 VIF 的地址,所以只能依赖 Flood & learn 来学习应该往哪个隧道转发。ARP 广播也没有机制实现代理,所以效率和 BUM 都成问题。另外企业用户常有和 BareMeta 或企业内部应用访问的问题,这时只能用 namespace 实现的软件路由器实现,效率和性能都很成问题。集中化的路由器更是问题很多。

总结一下:

VxLan 的具体问题后边补充,我们先说下目前的解决方案有什么

一些解决方案:

第三方软件方案:Nuage Networks, OpenContrail

社区改进:BaGPipe, L2 Population, DVR

硬件方案:Cisco, BigSwitch

先说一个比较少为人知的 BaGPipe,给一张图:

BaGPipe 的架构就不详细介绍了,可以用 devstack 搭一下体验一下,大致原理就是由单独的 BGP 软件运行 MPBGP 协议,与 RR 建立 Peer,交换可达信息。RR 可以是硬件设备,也可以是一些开源软件。

但是问题也是很明显的:

BaGPipe 不是一个在多个生产环境经过验证的软件

BaGPipe Agent 是否可靠

路由没有解决

那么我们来看下社区的正统实现:L2 Population + ARP Responder

主要方法就是由 Neutron Server 发布消息,OVS Agent 根据信息设置 fdb 和 tunnel。

三层的方法需要 DVR,DVR 文章很多了,不再赘述问题:

L2 Pop 强制影响了转发平面,对于一些网络自主行为无法支持例如虚 IP 的漂移

大量的广播消息,对消息队列有很强要求

DVR 问题也很多

回过头来,我们尝试从协议上把这个问题分析一下,下边要用 louis 大神的一些图

这是以 DCI 场景说明,在 Fabric 内跑 IGP,因为控制平面是中心化的,所以DCI效率很低,无法把广播尽量保持在本 DC 内,大家把路由信息发到一个统一控制平面上,再下发下去

因为没有广播控制(不传递host可达信息),所广播会像这样:

为了解决 VxLan 对组播的依赖,所以大家提出给予 HER 的方案,全称是 Head-end Replication,是一种广播/组播流量转成单播的方案。效果太简单了,根本问题是第一版的 VxLan 缺乏控制平面,只是单纯说 IP Fabric 传送就行了,不像现代的网络协议通过控制平面解决广播、Flood、一些检测等问题。

那我们来讨论 VxLan 2.0 MP-BGP EVPN VxLan,其实核心思想主要是可达信息的互换,制定一个控制平面,具体可以看 RFC。

用图来看:

当 Leaf 获取后边 Host 信息时,上报到 RR,两个控制平面的 RR 相互交换可达信息:

RR 把汇聚的可达信息返回给 Leaf:

那么后边的转发就可以智能很多:

在我们的生产实践中,比较过几种方案,比如说 BGP 是不是必须得用 RR 反射路由?其实也不一定的,比如用 eBGP 来建立 Peer,每个 Leaf 有单独的 ASN,这样配置上可能会麻烦一些,但逻辑也很清晰,上面这几种方式我们可以总结一下:

再说下我们的一些生产经验,第一:交换机的控制器的控制平面性能问题很重要,因为 OpenStack 很多地方并发和实现并不安全。有些地方缺乏锁,特别是并发情况下,从 Nova 到 Neutron 都有。

第二个是数据库同步,从 OpenDayLight 到 DragonFlow 都在解决数据库同步问题,因为这个确实是核心问题。

第三个是控制器要考虑到一些特别情况,比如我们有时希望手动加入一些配置,这些配置可能是控制器无法加入的,比如做 DCI 时,因为控制器支持不够,需要手动在 VRF 加路由,那么要确定控制器不会直接把 VRF 清掉。

第四个是在可靠性上可能需要做一些牺牲,比如一个可靠的控制器可能需要确保配置确实下发下去了,OpenFlow based 的控制器一般没有确保流表下达的可靠性的。基于配置的控制器可以 get conf 确定 sync,再 save config,再 get config。这样可能会很花时间,反而带来很多问题,所以怎么解决这些问题是我们生产实践的一些核心问题,理论上的问题反而基本是很成熟的。

分享就到这里。

Q&A

Q1:是不是集中式控制比evpn更合适?

A1:evpn 主要解决的是 vxlan 的效率问题,集中式控制器可能关系不那么大,但我们用的控制器其实是个配置管理器,所以集中式还是靠谱一些

Q2:添加vrf路由放到控制器里面做也可以吧,不需要在路由器上手动配置,控制器掌握一切

A2:是的,只是使用的控制器功能有些缺乏

Q3:干嘛让bgp搞这个

A3:就是解决VxLan的flood问题,特别是DCI场景

Q4:如何确定100%被正确下发了呢,假如没有收到的时候会不会还有其他情况导致?

A4:目前会在save conf 后 get conf 确定一把,但是这样效率很低,一个 port 的更新可能得几秒,所以这是将来要改进的地方。

Q5:问个低级问题,能用neutron直接对接硬件交换机做vxlan吗

A5:只需要通过netconf/api配置就可以了,比如实现一个对控制器的 mechanisim driver 到 neutron 里,由控制器下发配置

Q6:还是用控制器来管理网络设备,neutron调控制器吧

A6:那倒不需要、直接 neutron ML2 对 交换机就可以,交换机需要有对 ML2 compliant 的 driver,不必要有 ODL或任何SDN 控制器,不少厂商都支持 硬件 VTEP。

Q7:硬件估计确认配置下发成功更麻烦些

A7:控制器 如ODL 用 netconf 管理交换机 更统一些

Q8:用EVPN来实现VxLAN并且把VRF通过CLI或者Netconf注册到SDN控制器,这应该不难,难的部分是如何把VRF的配置做到从cloud manager管理下发到SDN控制器,在跨DC的场景中自动配置L3VPN的连接,同时能够复用PE peer的现有连接啊,主要用于multi tenancy, 不知道有没有类似项目这么做的呢?

A8:好像没有 我了解的DCI场景还是OTV多

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2016-05-16

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

VXLAN in OpenStack Neutron

2915

来亲自试一试NoSQL

针对Web开发人员,DBA,程序员,本文介绍了NoSQL数据库的基本概念,不同类型及其特性。

1923
来自专栏程序员互动联盟

【前沿技术】啥叫实时虚拟化?

实时虚拟化听起来有点矛盾,但是它确实是有用的(在某些条件下),并且为 Linux 内核的灵活性又提供了一个强有力的证明。KVM2015 论坛的前两个演讲就详细的...

3964
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第29章 NTP网络时间协议基础知识

本章节为大家讲解NTP (Network Time Protocol,网络时间协议)和SNTP(简单网络时间协议,Simple Network Time Pro...

1183
来自专栏顶级程序员

开源巨献:Google最热门60款开源项目

作者:程序猿(微信号:imkuqin) 猿妹 链接:https://www.itcodemonkey.com/article/329.html(点击尾部阅读原...

6349
来自专栏逸鹏说道

关于XShell+XFtp的说明

本来我懒得管这些,苏州包皮公司接二连三举报我司,连免费版本的XShell+XFtp都收费,看不下去了,说说国外下载大法 今年爆出了远程执行漏洞,老版本就别用了吧...

53310
来自专栏张善友的专栏

复合事件处理(Complex Event Processing)介绍

近年来,面向服务架构 SOA一直是热门的议题。面向服务架构SOA 使用了比组件、程序(procedure)层次更高的服务做为处理单元,通过开放格式交换标准例如X...

2777
来自专栏ATYUN订阅号

【科技】Google推出首个Android P开发者预览版

AiTechYun 编辑:nanan Google 昨日发布了首个Android P开发者预览版,现在可以在developer.android.com下载。预览...

3736
来自专栏源哥的专栏

基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(3)-内容过滤防火墙系统简介

也可以叫做内核编程,因为系统对数据包进行过滤的工作量非常大,使用模块编的话,可以提高系统的效率。在本程序中,包过滤模块,内容过滤模块和数据交互模块都使用的模块...

771
来自专栏互联网杂技

开源巨献:Google最热门60款开源项目

0、机器学习系统 TensorFlow ★Star 62533 ? TensorFlow 是谷歌的第二代机器学习系统,按照谷歌所说,在某些基准测试中,Tenso...

8166

扫码关注云+社区