NetDevOps入门与实践.html.pdf
《NetDevOps入门与实践.html.pdf》由会员分享,可在线阅读,更多相关《NetDevOps入门与实践.html.pdf(174页珍藏版)》请在三一文库上搜索。
1、本书赞誉 (本书推荐人排名不分先后,以音序排列) 随着通信技术近年来颠覆性的发展和变化,对传统网络技术工程师们的挑战越来越大。作者以传统网工1成功转型的亲身经验撰写了本书,它直击传统网络工程师们的痛点,是难得的兼具实用价值和 实践意义的“惊艳”之作,令人耳目一新! 方芳,思科大中华区副总裁兼运营商 spine1 - leaf2; spine1 - leaf3; spine1 - leaf4; spine1 - leaf5; spine1 - leaf6; spine2 - leaf1 color=red; spine2 - leaf2; spine2 - leaf3; spine2 - lea
2、f4; spine2 - leaf5; spine2 - leaf6; 解析这个DOT文件在Chrome浏览器(需要安装DOT Lang Viewer插件)中的显示结果如图2-3所示。使用DOT语言可以借助文本的方式来保存一个网络拓扑图。http:/www.graphviz.org提供了 DOT的详细说明,读者可以参考。 图2-3 Chrome浏览器显示拓扑图 再者,对于纯文本的文件,建议读者学习和了解MarkDown的文件格式。MarkDown具有以下优点。 兼容性好。纯文本的文件格式兼容性非常好,任何平台下都可以完全兼容。 可以转化为其他格式。MarkDown可以很容易地转换为HTML、P
3、DF等文件格式,并且经过了一定的排版和格式处理。 语法简单。MarkDown的语法非常简单,很容易学习和应用。 最后,二进制的文件相对不太好管理。建议大家最好保留每个二进制文件的MD5或者SHA的HASH值。Linux和MAC OSX很容易对此类系统文件进行MD5与SHA值的计算。例如: $ md5 iosxrv-k9-demo-6.1.2.qcow2.tgz MD5 (iosxrv-k9-demo-6.1.2.qcow2.tgz) = 71d3be46fb68f8058b6c683f80a0f410 通过管理文件的HASH值可以确定一个文件的内容是否完整。即使文件名称被修改了,HASH值也不
4、会发生变化。其值不变就可以认为是相同的文件。大家熟悉的云网盘也是通过这个方法进行海量文件 管理的。 2.1.4 版本管理的工具 在版本管理部分,存在很多的工具。目前较为流行的一个工具是Git(https:/git-)。Windows、Linux和MAC OSX都支持Git。Git是一个分布式的版本控制软件,由大名鼎鼎的Linux之父 Linus Torvalds所开发,并于2005年以GPL方式发布,其最初目的是更好地管理Linux内核开发。现在这个工具几乎是最为流行的版本管理软件。目前GitHub(https:/)是一个通过Git进行版 本控制的软件源代码托管服务中心。现在GitHub不单单
5、有软件的源代码,很多软件的使用说明也通过GitHub进行管理。这些内容通常被放在Git Pages(https:/github.io)中。对于本书的读者而言,掌 握基本的Git工具是后续章节学习的基础。出于篇幅的考虑,这里不对Git的使用方法进行展开,读者可以参考http:/rogerdudler.github.io/git-guide/index.zh.html,这个文档是一个非常简洁的Git入门 教材,其还包括多语言的版本。本书的后续章节中也会遇到Git相关命令,本书后续会默认大家已经了解和熟悉Git的基本命令。 2.2 编程语言的选择 NetDevOps中有开发的部分,开发就必然会涉及编
6、程语言。网络工程师在初次接触NetDevOps时,都会遇到编程语言的选择问题。下面我们就来简单讨论一下如何选择编程语言。这里我们将从程序 语言的选择和数据描述语言的选择两个部分来进行叙述。 2.2.1 程序语言的选择 在程序员的世界里,讨论哪种编程语言是最好的语言,往往会引起非常激烈的争吵。笔者不敢在这里和大家讨论哪种语言是最好的语言,而是从自己的角度和大家分享一下如何选择适合NetDevOps的 编程语言。 众所周知,编程语言既有编译型语言,也有解释型脚本语言。通常来说,编译型程序执行速度快,同等条件下对系统要求相对较低,C、C+、C#就是这类语言。相对于编译型语言的存在方式,解释 型语言的
7、源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。例如,Python、Ruby、JavaScript、Perl、Shell等就是解释型语言。 在网络运维和管理中,程序的执行效率也许不是最为关键的。换句话讲,再慢的程序(只要不出错)也会比人工执行效率要高。程序大量的执行过程是需要和网络设备进行交互的。脚本程序在执行过 程中很多时候都是在等待网络设备侧返回的数据信息,因此执行效率瓶颈往往并不是语言的代码执行效率。另外,工程师也许更加关心的是程序开发的效率、代码的可读性方面。从这些方面考虑,解释型 语言是首选语言。 在众多的解释型语言中,哪些语言更加合适呢?现在程
8、序在开发的时候,通常会采用Web方式进行程序发布。基于Web的程序通常会分为前端和后端两大部分。前端开发主要解决视觉的问题,即如何 更好地展现数据。在浏览器中展现数据,JavaScript几乎是唯一的选择,当然还有HTML以及CSS等语言的方式。除了前端,后端的内容也是非常重要的。后端的主要功能是获取、整理以及保存数据。在某 些时候,为了简化开发的工作量,只保留后端的部分也是很正常的。对于NetDevOps网络工程师而言,如果只是为了快速地完成工作内容,将需要更多地关注后端的开发。在后端开发中,较常见的语言有 Python、Ruby、Bash、Java。其中,Python与Ruby在Web后端
9、开发中非常有优势。另外,NetDevOps工程师还需要和网络设备打交道,网络设备的厂家很多。近几年,网络设备的可编程能力越来越 强。基于笔者的观察,大量的网络设备会支持Python与Bash两种语言。 因此,笔者建议NetDevOps可以选择Python与Bash。如果要兼顾前端的开发,那么也需要了解和掌握一些Javascript、HTML、CSS相关知识。在本书的后续章节中,使用的语言主要是Python与 Bash,我们会分别介绍一下这两种语言的基本语法,以及在网络运维和管理中基于这两种语言开发的常用一些工具。 2.2.2 数据描述语言的选择 2.2.1节提到了编程语言的选择问题,其选择余地
10、相对较大,并且笔者给出了认为更加适合的语言,以减少初学者在语言选择上的徘徊。但在数据描述型语言的选择方面会少很多,这里笔者给出一些常 见的、在NetDevOps开发中通常会用到的格式。这里提到的数据描述型语言,读者最好能较好地掌握(其实掌握这些内容比学一门编程语言要简单很多)。 数据描述型语言主要是为程序提供服务的,也就是说程序能够快速方便地解析它们。部分数据描述型语言还兼顾了人的可读性,让人也能够较为方便地编写和阅读其内容。 下面是常见的数据描述型语言。 1.JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。J
11、SON数据格式与编程语言无关,它脱胎于JavaScript,但目前很多编程语言都支持JSON格式 数据的生成和解析。JSON用于描述数据结构,其形式如下: 名称:值 对象(object):一个对象以“”开始,以“”结束。一个对象包含一组非排序的名称与值对。 每个对内的名称与值(collection):名称和值之间使用“:”隔开。 多个对(名称与值对)之间使用“,”分开。 值的有序列表(array):一个或者多个值用“,”分区后,使用“”括起来就形成了列表。 “hostname“: “Router1“, “hostname“: “Router2“ JSON格式表达的是一种树状的数据类型,非常容易
12、被保存到NoSQL数据库中,如MongoDB。在网络编程中,这种结构较为常见,也易于使用。比如在Cisco Nexus系列的交换机上就可以直接输出为 JSON格式的数据。 “ins_api“: “type“: “cli_show“, “version“: “0.1“, “sid“: “eoc“, “outputs“: “output“: “body“: “hostname“: “switch“ , “input“: “show switchname“, “msg“: “Success“, “code“: “200“ 2.XML XML(Extensible Markup Language,可扩
13、展标记语言)是一种标记语言,用于传送及携带数据信息,不用于表现或展示数据。这样的结构并不太适合人直接阅读。但XML中的tag是可以携带多个属 性的。并且,XML还有namespace等概念。相比JSON,XML能表示更加复杂的数据结构,也比JSON复杂很多。XML格式是NETCONF协议的默认交换数据的格式。比如Juniper的路由器、交换机等网络 设备上运行的JUNOS可以直接输出XML格式的数据。XML是一种结构化的文本,非常适合程序进行处理。 userhost show chassis alarms No alarms currently active userhost show cha
14、ssis alarms | display xml 3.YAML YAML(http:/yaml.org)是一种用来表达数据序列的格式,对人而言可读性较高,可以简单表达清单、散列表、标量等数据形态。它采用空白符号缩进的方式,非常适合用来表达或编辑数据结构、 配置文件、文件大纲等内容。由于YAML使用空白字符和分行来分隔数据,因此它特别适合用grep、Python、Perl、Ruby等语言进行操作。另外,YAML没有使用各种封闭符号,如引号、各种括号等,这 些符号在嵌套结构中会变得复杂并且难以辨认。YAML的语法非常简单,主要注意文本的缩进。读者可以参考如下链接: http:/www.yaml.
15、org/spec/1.2/spec.html; http:/ 下面的Ansible的配置文件就采用了YAML格式进行编写。 - - hosts: “core“ connection: local remote_user: “admin“ gather_facts: False tasks: - nxos_interface: interface: “ item “ mode: layer3 admin_state: up transport: nxapi host: 10.255.0.75 username: admin password: cisco12345 with_items: - E
16、thernet1/1 - Ethernet1/2 - Ethernet1/3 - Ethernet1/4 4.YANG 和前面三种语言不同,YANG不是一种数据描述语言,而是一种数据建模语言。也就是说,它是用来定义数据的数据结构的,而不是数据的实体。通过下面这个例子可以很容易理解。 module acme-system namespace “http:/ prefix “acme“; organization “ACME Inc.“; contact ““; description “The module for entities implementing the ACME system.“;
17、 revision 2007-11-05 description “Initial revision.“; container system leaf host-name type string; description “Hostname for this system“; leaf-list domain-search type string; description “List of domain names to search“; list interface key “name“; description “List of interfaces in the system“; lea
18、f name type string; leaf type type string; leaf mtu type int32; 这个文件使用YANG定义了一个交换机的输出数据结构。system包含host-name、domain-search以及interface三个子内容。下面的输出内容是某一台交换机真实的输出结果。 Swith-1 Eth3/1 Ethernet 1500 Eth3/2 Ethernet 1500 通过这个例子,我们可以看出:YANG文件定义的是一个数据结构,而设备输出的结果使用了这个定义的数据结构,并在结构中相关部分给出了具体的值。关于YANG语言具体的内容,读者可以
19、参 考http:/www.yang-central.org。 目前,由于各厂家网络设备的输出格式都不一样,并且大量的格式还是非结构化的数据格式,这种非结构化的数据格式对程序的开发并不友好。YANG语言是专门为网络环境而开发的语言,它对网络 设备的输出数据进行抽象化并提供了一个通用的语言。Google、AT Authentication retries: 3 Minimum expected Diffie Hellman key size : 1024 bits IOS Keys in SECSH format(ssh-rsa, base64 encoded): ssh-rsa JUNOS配置
20、公钥: edit system login user yuxin userhost# set authentication load-key-file id_rsa.pub .file.19692 | 0 KB | 0.3 kB/s | ETA: 00:00:00 | 100% edit system userhost# show root-authentication ssh-rsa “”; # SECRET-DATA 3.使用ssh-agent管理密钥 命令ssh-agent是用于管理SSH私钥的工具,它为私钥提供了长时间且高速的缓存。其通过一个驻留在系统中的进程来实现这个功能。命令ssh
21、-add可以将用户需要使用的私钥添加到由ssh-agent维护 的列表中。之后SSH需要使用私钥登录设备时,会优先在这里寻找私钥的高速缓存部分。命令如下: $ eval ssh-agent Agent pid 53053 $ ssh-add yuxinpw_rsa Enter passphrase for yuxinpw_rsa: Identity added: yuxinpw_rsa (yuxinpw_rsa) 注意 eval后面使用的是反引号(),位于键盘波浪号()下面,实际为同一个键。对于美式键盘,其位于数字1前面的那个键。 命令ssh-add添加了带有密码的私钥,在添加的时候就会提示输
22、入密码。以后在SSH中使用这个私钥的时候就不需要再一次提供密码。 注意 对于前面的疑问,这里终于得到了解释,带密码的私钥仅仅在添加到密码库时被要求输入密码,而登录设备时将不再需要输入密码。 $ ssh-add -l 2048 9b:0a:d4:2c:00:fb:69:59:e4:6f:a5:ca:af:8e:cc:aa .ssh/yuxin_rsa (RSA) 1024 aa:50:a5:a4:14:74:27:db:89:14:e8:e8:c9:55:41:38 yuxinpw_rsa (RSA) 使用命令ssh-add-l可以查询现在ssh-agent管理了哪些私钥。 通过上述的方法可以让
23、设备的登录过程更加安全,同时提升了登录设备的便利性。 注意 对于一个用户,使用公钥认证的方式和使用tacacs+或radius的认证方式不能同时使用。要么使用公钥认证,要么使用密码认证(密码认证可以使用tacacs+或radius)。公钥认证用于本地认证, 而tacacs+或radius的认证方式用于集中认证。不过,无论通过哪种认证方式,都可以使用SSH进行登录。如果设备支持ControlMaster的功能,将可以简化登录过程中频繁输密码的过程。 3.2.7 使用scp进行文件传输 命令scp是secure copy(安全复制)的简写,用于进行远程复制文件。它与远程设备通信的通道是和SSH一样
24、的,加密方式也是类似的。其传输端口和SSH是一样的,默认为tcp 22。 1.基本命令和参数 $ scp 参数 原路径 目标路径 $ scp adminrouter1_ios:/config/vios vios 远程设备的路径表示为usernamehostname:path,用户名和远程设备的名称或IP用“”进行分割,这点和SSH登录方式是一致的。远程设备上的路径和设备名称中间用“:”进行分割,建议在 这里写出远程设备的绝对路径。 下面列出几个常用的参数。 -q:不显示传输进度条,常用于脚本中。 -r:递归复制整个目录,这在复制多个文件时很有意义。 -l:limit,限定用户所能使用的带宽,以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NetDevOps 入门 实践 html
链接地址:https://www.31doc.com/p-5514594.html