《Cloud Native Data Center Network》读书笔记-8

第十章 网络自动化

10.1 什么是网络自动化

允许程序执行网络操作员需要手工执行的工作任务。网络可以自动修复检测到的问题。网络自动化是云运营商成功的重要原因之一。

10.2 谁需要网络自动化?

自动化是有意义的。它可以帮助您构建可预测、可伸缩和灵活的网络。

传统网络架构中配置复杂,而且每个单体都会有差异,这使得必须通过手工的方式进行配置。随着Clos架构的兴起,大部分的网络设备都趋同,配置也基本一致,如果再进行手工配置,那么因为人为的麻木而导致故障的产生。而且时间是有限的,用有限的时间去重复大量重复的工作是不合适的。随着网络的增长,新设备新功能也不断的推出,管理人员对于故障的容忍程度也越来越低,如果没有自动化,就很难跟踪所有信息并快速添加新设备。而且现代数据中心对于敏捷性的要求越来越高,不单单要重复完成相同的工作,而且要求的速度也越来越高。因此,自动化是未来几年的一项基本技能,要么直接适用于您的网络本身,要么在您所寻求的下一项工作中可能有用。

10.3 网络自动化是否意味着学习编程?

网络自动化是否需要学习编程。自动化是让程序完成这个任务,所以网络工程师将进行语法学习。但是你可以做很多事情,学习如何用YAML和Jinja2做模板。学习Python是一个明确的优势,Python相对容易学习,并由此实现很多自动化的工作。

10.4 为什么网络自动化很困难?

10.4.1 IP地址和接口的问题

在IP网络中,接口具有IP地址。每个接口必须有一个IP地址才能参与路由;换句话说,基于IP地址的数据包转发。路由协议如何与对等协议通信呢? 最常见的答案是将链接的两端放在一个公共子网上,通常是a/31或a/30。这允许一端使用桥接网与另一端通信,因为这两端在同一个子网上。如何自动生成每个接口的两端都是唯一的配置?要做到正确,你必须知道链接的两端是什么。这种IP地址的成对分配是网络自动化在技术上困难的主要原因之一。

10.4.2 使用规模

网路中,IP地址的规划会变得非常复杂,因为有太多需要规划的地址资源。我们需要划分子网、我们可能需要为设备分配环回接口地址等。

10.4.3 网络协议配置的复杂性

BGP不仅要求两个对等端具有正确的IP地址,而且还要求在对等配置中指定它们。此外,传统的BGP配置要求您唯一且正确地将对等关系与另一个称为ASN的信息进行配对。OSPF要求我们指定OSPF对等的IP地址。另外,它需要为每个接口或地址指定OSPF区域。此外,您需要指定被动接口,这些接口是您发布地址但从不使用OSPF对等的接口。IS-IS有一些不同的困难:你需要提出一个面向对象独立的地址格式的路由器ID。当使用网络虚拟化时,它会进一步增加路由协议配置的复杂性。L2协议通常在复杂度曲线上运行得更高。

10.4.4 编程接入的缺乏

CLI的限制相当明显,缺乏任何编程访问或特性。如果命令失败,CLI甚至不提供有效的错误代码。虽然SNMP是一种配置和监控工具,但SNMP今天只用于监控。

10.4.5 传统的网络操作系统的限制

传统的网络操作系统的设计目的不是作为平台,而是作为应用程序。这意味着除供应商之外,任何人都不可能扩展或添加到设备上。

10.5 网络开发人员可以做些什么来帮助网络自动化?

自动化使网络管理员的生活更容易的愿景:

ASCII配置文件,而不是二进制标记

程序访问,而不仅仅是一个图形用户界面(GUI)

所有配置的备份/恢复机制,或者至少单独的组件配置

静默安装选项;即不要制作安装或更新手册

使用系统日志而不是单个日志文件的一个选项

良好的设备

自动化友好的协议配置

结构化输入/输出

10.6 网络自动化工具

工具可分为两大类

系统管理员工具包:Ansible, Salt, Puppet, Chef

网络管理员工具包:这里的选项包括netconf,YANG,和Restconf。netconf是一种传输工具,可以与平面文件配置或YANG数据模型一起使用。

网络管理员模型假设一个组件的所有供应商之间都有一个统一的数据模型,而系统管理模型则没有做出这样的假设。

使用Ansible一些原因:

在网络操作人员中可能占有很大的使用范围。

从2.2版本开始,对网络设备的支持程度已经稳步增长。支持几乎每个网络供应商。

对于知道CLI的人来说是相当简单的。

允许使用一个强大的和灵活的模板工具,称为Jinja2。

几乎不需要任何编程知识。您可以使用Jinja2的控制结构来执行简单的if/for/while控制。

允许运行在多个平台上:当然,Linux,也可以运行macOS和WIN。

开源的平台。

10.7 自动化最佳实践

简单的开始

如果您试图完成一项大型或复杂的任务,网络自动化可能会显得令人生畏。如果你从更简单的任务开始,你保持在自动化路径上的可能性会更高。例如,自动执行启用路由和分配环回IP地址的任务。

将代码与数据分开

需要确保所做的代码独立于每个设备的特定值无关。例如,如果您启动一个非常简单的任务,例如为路由器分配环回IP地址,请将IP地址保存在一个单独的文件(或一个单独的文件)中,以执行作为签名的命令。或者,从自动执行只读命令开始,例如获取各种设备的序列号或型号。允许文件可以通过只为变量定义特殊的文件来帮助您。

验证

您使用的工具应该为您提供验证应用之前推动的整个配置的机制。例如,Ansible在推出文件时具有验证关键字。在使用模拟工具,如空白工具将这些工具推到实际设备之前验证更改。

Git保存源代码

使用Git等源代码控制系统来保存代码的版本。

可回退

Clos拓扑可帮助您控制“爆炸半径”。但是,您需要确保配置不同时对所有节点应用错误的更改。

选择一致的工具和语言

Ansible和Python可以在一起使用,Puppet或者Chef和Ruby一起使用。不要混合使用语言和工具。

迭代

随着技能的提高,您会发现,您可以通过找到更大的模式、更高效的模式等来改进自动化任务。

参与社区

使用具有一个大的、有用的社区的工具。

10.8 Ansible概述

Ansible是一个基于推模式的自动化工具。
在这里插入图片描述
图10-2 Ansbile如何工作
Ansible可以基于Linux或者MAC平台来工作:将配置推送给相关的设备列表;该工具还可以作为一个剧本,让设备去生成配置或者运行命令。

以下为Ansible的基本特征:

自动化工具:

主要用于配置,尽管起初是为了获取现有设备的报告。您也可以在配置后使用它进行验证,但功能一般,因为YAML和Jinja2只是格式的静态定义,而不是语法语言。

无需代理:

可使用在任何设备上,而无需在设备上安装特定的代理。这使得网络运营商的网络操作更容易。更改网络操作系统的版本不会影响该工具的可用性。

多种本机传输支持:

默认情况下,Ansible使用SSH与其配置的设备通信。但它可以使用操作系统供应商提供的任何传输。例如,Arista支持提供一个允许的模块,该模块使用操作系统的RESTAPI来获得比SSH提供的更高的效率。Juniper和思科的一些操作系统提供NETCONF作为传输。

YAML:

Ansible使用YAML作为其基本的配置语言。

将代码与数据分开的模板:

Ansible的基本模型是使用基于模板工具Jinja2,允许操作员在通用模板中表达配置,然后使用不同文件中提供的设备特定参数呈现模板。设备的参数是根据设备的主机名和设备属于的用户定义的组,自动从设备的独立文件中派生出来的。

用户可扩展:

除了允许其本身提供的标准模块外,网络运营商还可以通过编写自己的定制模块来执行某些操作来扩展其功能。

10.8.1 设备清单

对于静态实体,如网络交换机和物理服务器,允许使用一个设备清单文件。通过分组的方式,去定义Ansible可连接设备的状态,包括分布、版本等信息。这个清单文件一般是手工构建。

10.8.2 脚本

执行定义良好的工作流以此来来执行定义良好的任务,这包括编写脚本。

10.8.3 Ad Hoc命令

还支持运行临时命令:这些命令没有保存在任何地方,而是使用在命令行上传递的参数执行的命令——一种美化的网络范围的CLI。

10.8.3 结构化脚本

根据Ansible的文档,“角色是基于已知文件结构自动加载vars_files、任务和处理程序的方法。按角色将内容分组还允许与其他用户轻松共享角色。“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹林子的摩卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值