前言
云飘进我的生活,没有带来雨水或迎来暴风雨,但为落日天空增添了颜色。
—RabindranathTagore,流浪鸟
无论是对于本书的读者,还是作为这本书的作者来说,云原生数据中心网络都是一个相当大的话题,因此让我们先从一些容易的内容开始。
这是一本为数据中心构建一个健壮的、可扩展的网络基础架构的书。如果你是网络架构师或网络运营人员,想要了解、构建或验证数据中心的想法,那么这本书适合你。如果你是数据中心运营人员,不仅负责网络,还负责计算和存储,并且希望了解最新的数据中心网络设计思想,这本书也适合你。如果你是网络开发人员,希望查找一些网络相关的零碎信息或口头知识,这本书同样适合你。
更准确地说,这是一本关于云原生类型的数据中心网络设计的书。如果搜索“云原生”,你会发现它通常与微服务应用程序设计以及Linux操作系统相关联,并且依赖许多开源代码,这些只是实现云原生的方法而已。云原生的最终目的是构建健壮、敏捷、可扩展的应用程序,使企业能够和这个瞬息万变的世界保持同步。当云原生的理念应用于网络时,则意味着以健壮、灵活、可扩展和高效的操作方式来构建符合应用程序和业务需求的网络。
我选择“云原生”这个词是为了强调将云原生理念应用于创建网络上。即使你构建的网络规模达不到Amazon或Google的网络规模,在创建网络时你也需要考虑以下
一些特征:价格合理、高性能、易于管理、敏捷且可靠。本书将涉及所有这些特征。
本书不仅适合部署微服务应用程序的人们。无论你使用的是容器、虚拟机,还是裸金属服务器,都喜欢使用Kubernetes部署微服务应用,构建一个可靠且可预测的网络是每个人都渴望的事情。
不管过去我是否为厂商工作,我都不想借此书达到推动任何厂商发布新功能的目的。如果你看到反映厂商的示例或文字,那仅仅是因为我对厂商或工具熟悉,而不是打广告。偏见总是容易蔓延开来,如果你发现书中哪些地方会产生此类异议,请告诉我,我会纠正它们。我很坦率地承认我是开源工具的拥护者,我相信可以通过开源的方式构建更好的系统。
读者对象
如前所述,本书不仅面对网络架构师、网络运维人员,而且面向网络应用的应用开发人员。阅读本书所需的基础知识并不多,只需要知道什么是TCP/IP和什么是套接字。本书理论结合实践,将理论应用于搭建数据中心。本书重点不仅是像教科书那样只介绍技术信息,而是始终关注于设计数据中心的技术的应用。本书不会涵盖与数据中心网络无关的方面,例如,物理位置选择、电源和散热选择、物理布局等。
本书结构
本书分为三个部分:
架构
前两章介绍体系架构。开始将描述新的架构的需求以及新的网络架构。
技术
接下的九章将涵盖各种技术,体系架构就好比“骨骼”,这些技术共同为架构添加“血和肉”。这些技术可以指导我们选择采用的协议以及架构设计,从而构建真实的网络。
实践
其余的章节将涵盖体系结构中使用的技术的实践。在很大程度上,涵盖了网络配置和验证,包括将“少而精”的理念应用于网络配置。
这些章节的另一个重点是我希望能将计算和网络两个不同的领域结合起来,两者的结合使得数据中心工程师和架构师成为“文艺复兴时期的男女”,文艺复兴时期的人们知识渊博又有深度,可以从纷繁复杂的信息中找到有价值的内容。随着网络解耦的出现,Linux操作系统(OS)开始具有强大网络功能,应用程序也更加趋于采用分布式架构。随着高质量的开源路由套件的出现,网络和计算人为的隔离不再存
在。我们可以设计更新的解决方案,使计算和网络更优雅地结合在一起并有效运行。
本书章节有限,很多内容没有涉及,包括安全性、IS-IS(IntermediateSystemtoIntermediateSystem)、新的路由协议(我们真的需要这些新的协议吗),以及一些高级的主题,例如:数据中心互连,网络分析等。对此我深表歉意,因为我的时间、精力以及本书篇幅有限。同时,我担心太多内容可能会使你失去耐心。
本书使用的软件
为了保持“云原生”关键原则,本书的示例,配置片段等都将使用受人拥护且广泛使用的开源软件。这样也可以使本书做到与供应商无关。本书主要使用以下四个开源软件:
??Linux内核,作为网络操作系统,版本为4.18或更高。
??FRR,IP路由协议组件,主要版本为7.1。
??Ansible,自动化工具,版本为2.8。
??Vagrant,用于在笔记本电脑上模拟网络拓扑,显示运行代码,版本为v2.2.5。同时,我会使用Vagrant的libvirt库扩展,快速搭建大型网络。
我已经将自己笔记本电脑上运行的软件提交到GitHub上,我的笔记本电脑配置是Intel的i7-8550U处理器,16GB内存和16GBswap空间。包括Vagrant用来模拟Clos网络拓扑,还有Ansible等。这些软件通常运行正常,但是有时在打开某些浏览器选项时,软件运行会变慢。
如果书中的代码与GitHub库中的代码之间存在差异,以能正常工作的代码为准。
我使用CumulusLinux发行版作路由器。我使用Ubuntu版本16.04作服务器。我还提供了Arista的EOS(ExtensibleOperatingSystem)一些配置,主要是因为Arista提供了Vagrant,可以使用EOS和Vagrant构建网络,但遗憾的是在Arista4.20.0F版本之后才提供。
欢迎随时提供你真实的反馈。
所有的示例都可以从GitHub上下载,这些代码采用GPLv2许可认证。
排版约定
本书使用以下排版约定:
斜体(Italic)
表示新术语、URL、Email、文件名及文件扩展名。
等宽字体(ConstantWidth)
表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。
粗体等宽字体(Constantwidthbold)
表示命令或其他由用户直接输入的文本。
斜体等宽字体(ConstantWidthItalic)
表示应当被用户提供的值,或上下文决定的值所替换的文本。
使用示例代码
本书的示例代码、练习等补充材料可以到https://github.com/ddutt/cloud-native-datacenter-networking下载。
本书的目的是帮助你的工作。一般来说,你可以在自己的程序或者文档中使用本书提供的示例代码。除非你要复制大量的代码,你不必联系我们获得使用许可。例如,从书中摘抄几行代码编写程序就不需要获得许可。销售或分销O'Reilly书中的示例代码则需要获得许可。引用本书中的示例代码回答问题无需要获得许可。将本书中的大量示例代码附加到你的产品文档中则需要获得许可。
代码引用不要求注明出处,但如果你这么做,我们深表感激。出处格式一般包括标题、作者,出版社和ISBN。例如:“CloudNativeDataCenterNetworkingbyDineshG.Dutt(O’Reilly).Copyright2020DineshG.Dutt,978-1-492-04560-1”。
如果你觉得代码示例的使用不合理或不符合许可权限,请随时联系我们:permissions@oreilly.com。
O’Reilly在线学习平台(O’ReillyOnlineLearning)
近40年来,O’ReillyMedia致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们有一群独家专家和创新者,他们通过图书、文章、会议和在线学习平台分享知识和技术。O’Reilly的在线学习平台提供按需访问的直播培训课程、详细的学习路径、交互式编程环境,以及由O’Reilly和其他200多家出版社出版的书籍和视频。详情请访问http://oreilly.com。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’ReillyMedia,Inc.
1005GravensteinHighwayNorth
Sebastopol,CA95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
O’Reilly的每一本书都有专属网页,你可以在那里找到关于本书的相关信息,包括勘误表、示例代码及其他信息。本书的网址是:https://oreil.ly/cloud-native-data-center-networking
对于本书的评论或技术性问题,请发送电子邮件到:bookquestions@oreilly.com
要了解O’Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:http://www.oreilly.com
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
写这本书比我想象的要难。跑马拉松并不像跑10公里那样容易,类似地,写几百页的书也不像写几十页的书那样简单。我曾有过两次写几十页书的经历,与这次相差甚远。我非常感谢在撰写本书过程中得到众多互动和反馈。
本书的编辑AndyOram,也是我前两本书的合作伙伴。如果没有你编辑润色工作,本书读起来不会像现在这样有趣。你的批注总会给我的写作带来意想不到的乐趣。你一直伴随着我完成这本书的写作。无论是周末还是晚上,当我需要你的帮助时,你总会立刻提供帮助,推敲出正确的词或删除一些啰嗦的地方。让我印象最深的是,即使在午夜发送的电子邮件,你也几乎总会立即回复。并且,本书包括一首你创作的网络的诗,我深感荣幸和心怀感激。
感谢对本书进行审阅的伙伴AnthonyMiloslavsky,感谢你对整本书广度而周到的反馈,使这本书变得更好。DonaldSharp,感谢你对许多章节的反馈,如果没有你,多播这一章根本不可能完成。SeanCavanaugh,由于你的审阅和建议,自动化这一章变得比之前更好。CurtBrune,感谢你对ONIE(开放网络安装环境)部分的宝贵反馈。我亲爱的朋友SilvanoGai,也是我职业上唯一的榜样,感谢你对书中部分章节做的详细讨论以及对许多章节初稿的审阅。Grazieditutto,miocaroamico,欣赏你们的知识和人品。
RoopaPrabhu,DavidAhern,VivekVenkataraman,DanielWalton,WilsonKok,PurnaBendale,RamaDarbha和EricPulvino,感谢大家在这本书编写过程中解答我的许多问题,感谢在Cumulus中与你们共事,曾经的笑声、眼泪以及共同的经历让我难忘。PeteLumbis,感谢你和我心灵共鸣,虽然也会与我开玩笑,但总会鼓励我继续前进。ChristianFranke和DonSlice,感谢你们帮助我解答有关IS-IS和OSPF的问题。我的挚友Shrijeet,我时刻会想起你,我要感谢你的地方太多。
同时,非常感谢Microsoft的BartDworak,感谢SeanCavanaugh花了很多时间跟我介绍你在网络自动化方面的经验,让我完成了自动化这一章的内容。感谢Barak
Gafni对我之前《数据中心EVPN》一书提供了反馈,用于帮助修正和阐明EVPN和网络虚拟化这些章的一些要点。LincolnDale,感谢你对Arista问题的回复。感谢Narayan,如果没有NarayanDesai邀请我出席SRECon2016,并做网络入门演讲,我将不会编写这本书。演讲得到积极的反馈,所以O’Reilly出版社邀请我撰写本书。在Cisco和Cumulus工作期间,我学习了很多网络、数据包的知识和如何与人相处,并且有机会与一些最聪明的人一起工作。我特别感谢的两个人是Cisco的TomEdsall和Cumulus的JRRivers。
感谢开源社区所做的所有出色工作。Emacs,我使用的开源编辑器软件,已有25年以上的历史,我曾经用它写了整本书。Linux社区,我从Linux0.99版本起,就把Linux作为我主要的桌面系统,我记得我曾经花了整整一天的时间来下载SlackwareLinux软盘。这是很久之前的事情了,Ubuntu已经使Linux的使用体验变得流畅。除此以外,我还使用了HashiCorp的Vagrant和Ansible团队的Ansible。
感谢我的父母一直对我的写作以及其他方面的鼓励和支持。感谢Shanthala使我无后顾之忧。Maya,感谢你耐心等待我完成这本书。我期待有一天可以将你的漫画加入我的书中。是的,这将很吸引眼球。
作者介绍
Dinesh G. Dutt有二十年网络行业经验,在思科公司从事企业和数据中心网络工作期间,他曾经为思科的大型交换机设计过许多ASIC芯片。他最近的工作是Cumulus Networks公司的首席科学家。
[美] 迪内希·G. 杜特(Dinesh G. Dutt) 著
赵化冰 范彬 丁亮 译
资深解决方案工程师秦军作推荐序
秦军,从事网络技术领域多年,在物理交换机产品、SDN解决方案、云数据中心网络架构方向有丰富的技术积累。
译者介绍
赵化冰,腾讯云工程师,主要从事云原生相关的产品研发和开源相关工作。
范彬,从事云计算、容器产品研发多年。对最Z新的内核和网络技术一直保有学习热情。
丁亮,从事云计算开源网络项目,智能网卡和GPU等加速硬件的集成和开发工作。
目录
前言1
第1章为什么需要一个新的网络架构9
应用程序网络的洗牌10
世纪之交的网络设计13
桥接的魅力15
构建可扩展的桥接网络18
接入–汇聚–核心网络架构设计带来的问题22
不可扩展性23
复杂性24
失效域25
不可预测性25
缺乏灵活性26
缺乏敏捷26
背后的故事27
小结28
第2章Clos:新世界的网络拓扑29
Clos拓扑介绍30
深入探讨Clos拓扑32
同类设备的使用32
路由作为基本的互连模式33
Clos拓扑中的收敛比35
互连链路速率36
一些现实的限制37
细粒度的故障域39
扩展Clos拓扑40
比较两种三层模型43
应用与网络模型的匹配43
数据中心扩建44
Clos拓扑的影响44
重新思考故障和排错45
布线45
简化的库存管理45
网络自动化45
Clos网络的一些最佳实践46
交换机之间使用多链路46
spine交换机只用于连接47
使用框式交换机作为spine交换机48
主机连接模式49
小结50
参考文献50
第3章网络的解耦51
网络解耦52
为什么网络解耦如此重要54
成本控制55
避免供应商锁定55
特性标准化55
网络解耦可行的原因56
网络解耦之后网络操作的差异57
采购与支持57
首次启动58
开放网络安装程序环境58
网络解耦领域中的厂商:硬件厂商61
转发芯片61
ODM厂家62
CPU63
各种标准组织63
关于网络解耦的一些常见的不实说法63
网络解耦领域的一些最佳实践65
小结66
参考文献66
第4章网络操作系统的选择67
网络设备的新需求68
软件定义网络和OpenFlow的兴起69
SDN和OpenFlow更多详细信息70
OpenFlow面临的问题72
OVS74
SDN和OpenFlow对网络解耦的影响75
NOS设计模型76
交换机网络状态的存储位置78
交换芯片的编程80
API85
不同答案背后的原因85
用户接口86
NOS模型与云原生NOS需求进行比较88
NOS还能做什么93
小结93
参考文献93
第5章路由协议的选择95
路由概述96
路由表查找的原理97
如何选择路由99
路由表条目的类型100
RIB和FIB101
路由协议概述105
距离矢量协议与链路状态协议106
距离矢量协议解析106
链路状态协议解析108
总结距离矢量与链路状态路由交换110
比较距离矢量和链路状态协议110
链路状态和距离矢量协议的扩展110
距离矢量和链路状态协议中的多路径111
没有消息就是好消息112
链路状态和距离矢量协议中的传播延迟112
多协议支持113
无编号接口114
路由配置的复杂度115
Clos网络中的路由协议117
链路或节点失效时的链路状态与距离矢量协议118
Clos网络中的路由汇总121
安全与保障122
双向转发检测123
数据中心对路由协议的需求124
基本需求124
进阶需求125
一些少见的或前瞻性的需求125
为你的网络选择路由协议126
小结127
参考文献127
第6章网络虚拟化129
什么是网络虚拟化130
网络虚拟化在数据中心的应用131
强制将流量路由到特定路径上131
需要二层网络互联的应用程序133
云133
交换机的管理网络和数据网络的分离133
网络虚拟化模型134
服务抽象:二层或者三层134
内嵌虚拟网络与Overlay虚拟网络135
网络隧道:构建Overlay虚拟网络的基础136
网络隧道的优点138
网络隧道的缺点139
数据中心的网络虚拟化141
VLAN141
VRF142
VXLAN142
其他网络虚拟化解决方案144
虚拟网络数量的实际限制145
包头中虚拟网络ID字段的大小145
硬件限制145
控制面和软件的可扩展性146
部署模式146
网络虚拟化的控制协议147
虚拟控制面和物理控制面之间的关系148