- 可编程网络自动化
- (美)贾森·埃德尔曼等
- 3813字
- 2023-03-28 18:22:07
前言
欢迎阅读本书!
网络行业正在经历巨变。在新协议、新技术、新交付模型带来的变革以及企业为了赢得竞争而要变得更敏捷、更灵活的需求的双重推动之下,如今的组织和网络专业人员接受网络可编程性以及自动化思想和概念的动力可能比以往任何时候都更大。但是,什么是网络可编程性和自动化呢?让我们从本书开始,看看如何回答这个问题。
本书内容
顾名思义,本书侧重于网络可编程性和自动化。网络可编程性和自动化的核心是简化与网络设备、网络拓扑、网络服务和网络连通性的配置、管理、操作相关的任务,其中涉及大量组件,包括如今在网络中的应用要比过去广泛得多的操作系统、诸如持续集成之类的新方法,以及那些以前只属于系统管理员的工具(源代码控制、配置管理系统等)。我们认为这些都是网络可编程性和自动化的核心定义的一部分,所以将其全部涵盖在本书之中。本书的目标是让读者掌握网络可编程性和自动化的基础知识。
本书结构
不一定要通读本书,因为我们划分出了各个主题,以方便你找到自己最感兴趣的部分。前 3章提供了相关的背景信息,为本书剩余部分奠定了基础,所以从头开始依次阅读应该会有所帮助。然后你就可以随意跳到觉得最有用或最想看的主题了。我们会尝试让每章尽可能地相对独立,但和所有技术一样,这未必总能如愿。我们会尽可能提供交叉引用,帮助你找到所需的信息。
下面简要介绍一下本书的各个主题。
第1章 网络行业发展趋势
概述软件定义网络(Software Defined Network,SDN)的主要事件和趋势。正如这一章所介绍的那样,网络行业对于网络可编程性和自动化的日益关注就是从 SDN 开始的。
第2章 网络自动化
在第1章 SDN 相关讨论的基础上,这一章重点关注网络自动化——网络自动化的历史、自动化类型、自动化涉及的工具和技术,以及自动化和运维模型之间是如何相互影响的。
第3章 Linux
概述 Linux 操作系统。这一章绝不是对 Linux 的全面讨论,其目的在于让网络专业人员尽快了解 Linux、Linux 基础命令和 Linux 网络概念。
第4章 在网络场景中学习 Python
向网络专业人员介绍 Python 语言。Python 经常用于网络可编程性和自动化场景,这一章会讲解许多 Python 编程基础知识:数据类型、条件、循环、文件处理、函数、类和模块。
第5章 数据格式与数据模型
介绍在网络自动化项目中常见的数据格式。JavaScript 对象记法(JavaScript Object Notation,JSON)、可扩展标记语言(eXtensible Markup Language,XML)以及 YAML(YAML Ain't Markup Language)都会有所讨论。这一章还会引入数据建模的概念,并会简要介绍 YANG(一种用于网络的通用数据建模语言)。
什么是“数据格式”?
如果你是第一次接触这些内容,可别被术语吓到了。数据格式无非就是数据在两点之间传输时采用的编码或封装方式(例如,API 调用返回的响应数据)。第5章会逐一讲解。
第6章 网络配置模板
介绍使用模板语言创建网络设备配置。这一章会重点关注 Jinja 模板语言,因为它与 Python 是原生集成的。还会讨论另外两种模板语言:Mako 和 ERB。Mako 会与 Python 集成,而 ERB 主要配合 Ruby 使用。
第7章 使用网络 API
介绍应用程序接口(Application Programming Interface,API)在网络可编程性和自动化中的作用。我们会学习与 API 相关的关键术语和技术,并使用一些流行的厂商专用 API(包括设备 API 和控制器 API)作为示例,以了解如何将其用于网络可编程性和自动化。
第8章 使用 Git 控制源代码
介绍当前非常流行且使用广泛的源代码控制工具 Git。我们会讨论源代码控制的重要性、如何将其应用于网络可编程性和自动化场景之中,以及如何使用流行的在线服务(如 GitHub)。
第9章 自动化工具
研究 Ansible、Salt、StackStorm 等开源自动化工具的用法以及如何将其专门用于网络可编程性和自动化。
第10章 持续集成
介绍持续集成(Continuous Integration,CI)的概念以及所涉及的关键工具和技术。我们会讨论测试驱动开发(Test-Driven Development,TDD)的用法,探究 Jenkins 和 Gerrit 等工具和框架,展示整合了所有 CI 要素的网络自动化工作流示例。
第11章 打造网络自动化文化
研究为什么良好的文化是网络自动化关键且必不可少的要素,并说明如何培养这种文化。
附录 A Linux 高级联网
继续第3章的讨论,但会更深入地介绍 macvlan 接口联网、虚拟机联网、网络名称空间、Linux 容器联网(包括 Docker 容器)以及 Open vSwitch(OVS)的用法。
附录 B 使用 NAPALM
介绍 Python 库 NAPALM(Network Automation and Programmability Abstraction Layer with Multi-vendor support,多厂商支持的网络自动化和可编程性抽象层)的用法。该附录会探讨使用 NAPALM 管理厂商无关配置以及检索网络设备数据。最后会讲解 NAPALM 如何与第9章中介绍的 Ansible、Salt、StackStorm 等工具集成。
目标读者
如前所述,本书的目标是让读者掌握网络可编程性和自动化领域的基础知识和基本技能。我们相信,不同信息技术学科的人士都会通过阅读本书而受益。
网络工程师
鉴于本书的重点是网络可编程性和自动化,受众之一自然是“传统”的网络工程师,也就是那些擅长网络协议、网络设备配置以及网络运维和管理网络的人士。我们相信,本书可以使现今的网络工程师通过自动化和可编程性提高工作效率和生产力。
前提条件
有兴趣学习更多有关网络可编程性和自动化的网络工程师,无须具备任何软件开发、编程、自动化或 DevOps 相关工具的知识。唯一的前提是要有开放的心态,愿意学习新技术并接受新技术对你(网络专业人员)以及整个网络行业的影响。
系统管理员
系统管理员主要负责管理接入网络的系统,他们可能对书中所讨论的部分工具(尤其是 Linux、源代码控制和配置管理系统)有一些使用经验。本书可以作为一种机制,通过在不同的上下文中展示这些工具(例如,使用 Ansible 配置网络交换机,而不是使用 Ansible 配置运行着 Linux 发行版的服务器)来帮助系统管理员扩展对这些工具的认识和理解。
前提条件
本书并未对核心网络协议或概念做任何介绍或解释。但是,既然管理着与网络相连的系统,那么我们预计很多系统管理员已经掌握了核心网络协议的基础知识。因此,大多数有经验的系统管理员阅读本书应该没什么问题。如果你的网络知识有点儿薄弱,那么建议你找一本侧重核心网络概念和思想的书作为本书的辅助。例如,Packet Guide to Core Network Protocols 也许是一个不错的选择。
软件开发人员
软件开发人员应该也能从本书中获益。很多开发人员对书中所讨论的部分编程语言和开发工具(比如 Python 或 Git)有一些使用经验。和系统管理员一样,开发人员可能会发现在以网络为中心的场景中应用开发工具和语言是很有用的(例如,可以看看如何使用 Python 检索和存储网络特定的数据)。
前提条件
假设读者对核心网络协议和概念有基本的了解,书中提供的所有示例均以网络为中心。与系统管理员一样,刚接触网络的软件开发人员可能会发现有必要找一本侧重于核心网络概念的书作为本书的辅助。
本书中用到的工具
与任何技术领域一样,网络可编程性和自动化领域中的技术和工具存在很多版本和变体。因此,本书选择了一个我们自认为最具代表性的标准工具集。例如,Linux 发行版数量众多,但本书只关注 Debian、Ubuntu(它本身就是 Debian 的衍生产品)以及 CentOS(Red Hat Enterprise Linux 的衍生产品)。为了便于读者阅读,本书在各个工具对应的章节中直接写明了工具的具体版本。
在线资源
我们意识到,本书不可能涵盖关于网络自动化和网络可编程性的所有材料。因此,本书会引用其他一些在线资源,你可能会发现这些资源有助于理解书中所介绍的概念、思想和技能。
排版约定
本书使用下列排版约定。
黑体字
表示新术语或重点强调的内容。
等宽字体(constant width
)
表示程序片段,以及正文中出现的变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。
等宽粗体(constant width bold
)
表示应该由用户输入的命令或其他文本。
等宽斜体(constant width italic
)
表示应该由用户输入的值或根据上下文确定的值替换的文本。
该图标表示提示或建议。
该图标表示一般注记。
该图标表示警告或警示。
O'Reilly 在线学习平台(O'Reilly Online Learning)
40 多年来,O'Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独特的由专家和创新者组成的庞大网络,他们通过图书、文章和我们的在线学习平台分享他们的知识和经验。O'Reilly 在线学习平台让你能够按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本资源和视频资源。有关的更多信息,请访问 https://www.oreilly.com。
联系我们
如有与本书有关的评价或问题,请联系出版社。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)
奥莱利技术咨询(北京)有限公司
O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表 1、示例代码以及其他信息。本书的网页是 http://bit.ly/network-programmability-and-automation。
1也可以通过图灵社区本书主页提交中文版勘误。——编者注
对于本书的评论和技术性问题,请发送电子邮件到:errata@oreilly.com.cn。
要了解更多 O'Reilly 图书、培训课程和新闻的信息,请访问以下网站:https://www.oreilly.com。
我们在 Facebook 的地址如下:http://facebook.com/oreilly。
请关注我们的 Twitter 动态:http://twitter.com/oreillymedia。
我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia。
致谢
本书的出版离不开广大社区友人的帮助和支持。
首先,我们要向生气勃勃的网络自动化社区奉上感谢。人数实在太多,恕无法一一列举,但正是他们创建了 NAPALM 和 Netmiko 等开源项目,带头开展对大众的网络自动化教育,孜孜不倦地贡献自己的知识和经验来造福他人。感谢他们的努力和奉献。
在我们的特约作者的帮助下,本书得以更加完善,如果没有他们,我们肯定做不到,对此我们深表感激。Mircea Ulinic 贡献了配置管理工具一章中的 SaltStack 部分,Jere Julian 贡献了一些 Puppet 的内容,可惜我们未能将其收录到本书这一版中。多谢 Mircea 和 Jere。
我们的技术审校人在确保本书内容在技术上的准确性和易读性方面发挥了关键作用。我们要向 Patrick Ogenstad、Akhil Behl、Eric Chou 和 Sreenivas Makam 表示感谢。感谢他们确保本书成为不二佳作。
最后,如果少了 O'Reilly Media 的工作人员,那么我们的感谢就是不完整的。感谢编辑 Virginia Wilson 和 Courtney Allen、文字编辑 Dwight Ramsey、校对 Rachel Monaghan、索引编制者 Judy McConville、制作编辑 Colleen Cole、设计师 Randy Comer 以及插图师 Rebecca Demarest。本书从构思到成形,他们在其中所付出的努力不可低估,由衷地感谢他们所做的贡献和承诺。