了解Ansible的功能,这是一种无代理、可扩展的配置管理系统。网络自动化随着IT行业的技术变革,从服务器虚拟化到公有云和私有云,以及自助服务能力、容器化应用程序和平台即服务(PaaS)交付,一个一直滞后的领域后面是网络。在过去五年左右的时间里,网络行业似乎出现了许多新趋势,其中许多都属于软件定义网络(SDN)的范畴。注意:SDN是一种用于构建、管理、运营和部署网络的新兴方法。SDN最初的定义是基于物理上分离控制平面和数据平面(数据包转发)的需要,分离后的控制平面必须管理各自的设备。今天,在SDN的保护伞下有许多技术,包括基于控制器的网络、网络设备API、网络自动化、白盒交换机、策略网络、网络功能虚拟化NetworkFunctionsVirtualization(NFV)等。出于本报告的目的,我们将SDN解决方案称为我们的解决方案,它包括网络控制器作为解决方案的一部分,并提高了网络的可管理性,但不需要耦合控制层。这些趋势之一是网络设备API的出现,作为管理和操作这些设备的一种方式,真正提供了机器对机器的通信。在自动化和构建Web应用程序方面,API简化了开发过程,提供了更多的数据建模结构。例如,当启用API的设备以JSON/XML格式返回数据时,它比仅命令行设备返回需要手动解析的原始文本信息更结构化且更易于使用。在API出现之前,配置和管理网络设备的两种主要机制是命令行界面(CLI)和简单网络管理协议(SNMP)。让我们理解它们,CLI是设备的人机界面,而SNMP不是设备的实时编程界面。幸运的是,由于许多供应商都在争先恐后地向设备添加API,有时只是因为它被放入了建议书(RFP)中,所以这有一个非常好的副作用-实现网络自动化。当发布真正的API时,访问设备内数据和管理配置的过程会大大简化,因此我们将在本报告中对此进行评估。尽管使用许多传统方法(例如CLI/SNMP)也可以实现自动化。注意:随着未来几个月和几年的网络设备更新(LCTT译注:本文发表于2016年),供应商API肯定应该经过测试和测试,作为购买网络设备(虚拟和物理)使用的关键决策标准。如果供应商提供了一些库或集成到自动化工具中,或者如果它用于开放标准或协议,用户应该知道数据是如何通过设备建模的,以及API使用的传输类型。总而言之,与大多数类型的自动化一样,网络自动化是为了更快地工作。工作速度更快是一件好事,减少部署和配置更改的时间并不总是许多IT组织需要解决的问题。包括速度在内,我们现在研究这些不同类型的IT组织采用网络自动化的几个原因。您应该注意,相同的原则也适用于其他类型的自动化。简化架构如今,每个网络都是独一无二的“雪花”,网络工程师以能够通过一次性网络更改解决传输和应用程序问题而自豪,这些问题最终使网络难以维护和管理。而且它也很难自动化。网络自动化和管理需要从一开始就包含在新的架构和设计中,并作为第二或第三层项目进行部署。哪个功能适用于不同的供应商?哪个扩展适用于不同平台?使用特定网络设备平台时的API类型或自动化项目是什么?如果在设计过程之前回答了这些问题,则生成的体系结构将变得简单、可重复、易于维护和自动化,从而在整个网络中实现很少的特定于供应商的扩展。确定的结果在企业组织中,变更审查会议评估他们面临的网络变更、它们对外部系统的影响以及回滚计划。在人们通过CLI执行这些面对面更改的世界中,键入错误命令的影响可能是灾难性的。想象一个由3、4、5或50名工程师组成的团队。每个工程师都有自己独特的方式来处理他们所面临的变化。而且,使用CLI或GUI的能力并不能消除和减少管理这些更改期间出错的机会。使用经过验证和测试的网络自动化可以帮助实现更可预测的行为,并使执行团队更有可能获得确定性的结果,***在确保任务正确完成而没有人为错误的道路上更进一步。业务敏捷性毋庸置疑,网络自动化不仅为部署更改提供了速度和灵活性,而且还可以根据业务需求更快地从网络设备检索数据。自服务器虚拟化问世以来,服务器和虚拟化使管理员能够在瞬间部署新的应用程序。此外,由于应用程序可以更快地部署,问题出现了,为什么配置VLAN(虚拟局域网)、路由器、FWACL(防火墙访问控制列表)或负载平衡策略需要这么长时间?部署像Ansible这样的现代自动化工具将通过了解组织内最常见的工作流程以及为什么真正需要网络更改来使这变得更加容易。本章介绍一些高级知识,说明为什么要考虑网络自动化。在下一节中,我们将带您了解Ansible是什么,并继续深入探讨适用于各种规模IT组织的不同类型的网络自动化。什么是Ansible?Ansible是开源世界中领先的IT自动化和配置管理平台。它经常与Puppet、Chef和SaltStack等其他工具进行比较。Ansible于2012年作为开源项目出现,由MichaelDeHaan创建,他还创建了Cobbler并共同创建了Func,两者在开源社区中都非常受欢迎。在创建Ansible开源项目后不到18个月,Ansilbe成立并获得了600万的A轮融资。该公司成为Ansible开源项目的主要贡献者和支持者,并且一直如此。2015年10月,红帽收购了Ansible。但Ansible到底是什么?Ansible是一个超级简单的自动化平台,无代理且可扩展。让我们更深入地挖掘它的细节,看看Ansible有哪些特性让它在业界得到广泛认可。SimpleAnsible的一个吸引人的特性是您不需要特定的编程技能就可以使用它。所有指令,或者更确切地说,任务都是自动化的,并以任何人都能理解的标准、人类可读的数据格式进行记录。安装和自动化任务在30分钟内完成的情况并不少见!例如,Ansible剧本中的以下任务用于确保CiscoNexus交换机中存在VLAN:-nxos_vlan:vlan_id=100name=web_vlan您无需知道或编写任何代码即可确切了解它会做什么做什么!注意:本报告的后半部分涵盖了Ansible术语的详细信息(playbook、play、task、module等)。当我们使用Ansible自动化我们的网络时,我们将有一些简短的例子来触及这些关键概念。Agentless如果你看看市场上的其他工具,比如Puppet和Chef,你会发现,一般来说,它们需要在每台设备上安装特定的软件才能实现自动化。这种情况在Ansible上是不需要的,这也是Ansible成为网络自动化最佳选择的主要原因。这些IT自动化工具(包括Puppet、Chef、CFEngine、SaltStack和Ansible)最初是为了管理和自动化Linux主机的配置以跟上已部署应用程序的增长而构建的,这是有道理的。由于Linux系统配置为自动化,因此安装代理不是技术挑战。如果有的话,它只会延迟安装过程,因为现在有N台主机(你想要自动化)需要在它们上面部署软件。此外,当使用代理时,它们需要更复杂的DNS和NTP配置。这些在大多数环境中都是已经配置好的服务,但是当你想快速得到一些东西或者只是想测试它能做什么时,它会大大延迟整个设置和安装过程。由于本报告只是对Ansible网络自动化的介绍,我们想指出Ansible作为一个无代理平台,对网络管理员比对系统管理员更具吸引力。为什么是这样?如前所述,对于网络管理员来说,Linux操作系统是开源的,任何东西都可以安装在上面,这对网络管理员来说是非常有吸引力的。网络不是这样,尽管它正在逐渐改变。如果我们部署一个更广泛的网络操作系统,比如CiscoIOS,就是这样的一个例子,并提出这样的问题,“是否可以在基于IOS的基础上部署第三方软件(LCTT译注:这里的IOS,指的是Cisco的网络操作系统IOS)平台?”毫无疑问,它的答案是否定的。在过去的二十年里,几乎所有的网络操作系统都已经闭源并垂直集成到底层网络硬件中。在没有供应商支持的情况下,将代理加入网络设备(路由器、交换机、负载均衡器、防火墙等)并非易事。有一个像Ansible这样的自动化平台,它从头开始构建一个无代理、可扩展的自动化平台,就像它是为网络行业专门构建的一样。我们最终将开始减少和消除人与网络的互动。可扩展Ansible的可扩展性也很强。自开源以来,代码开始在网络行业发挥重要作用,需要有一个可扩展的平台。这意味着如果供应商或社区不提供特定的特性或功能,开源社区、最终用户、客户、顾问或任何人都可以扩展Ansible以启用一组给定的特性。过去,网络提供商或工具提供商通过挂钩提供新的插件和集成。想象一下使用像Ansible这样的自动化平台,并且您选择的网络供应商发布了您真正需要自动化的新功能。理论上,Web提供商或Ansible可以发布一个新插件来自动执行此独特功能,这是一件非常好的事情,从您的内部工程师到您的增值经销商(VAR)或您的顾问中的任何人都可以提供此集成。如前所述,Ansible实际上是最可扩展的,而Ansible最初是为自动化应用程序和系统而构建的。这是因为Ansible的可扩展性来自其为网络供应商编写的集成,包括但不限于Cisco、Arista、Juniper、F5、HP、A10、Cumulus和PaloAltoNetworks。网络自动化,为什么要用Ansible?我们已经简要了解了Ansible之外的内容,以及网络自动化的一些好处,但是我们为什么要使用Ansible来实现网络自动化?很明显,已经提到了使Ansible成为如此出色的自动化应用程序部署平台的许多原因。不过,我们现在会更深入一点,更多地关注网络,并继续总结一些其他需要更多关注的关键点。无代理谈到网络自动化,无代理架构的重要性怎么强调都不为过,尤其是当它适用于现有的自动化设备时。如果,当我们查看当前网络中已经安装的各种设备时,从DMZ和园区,到分支机构和数据中心,份额最高的设备并不是API最高的设备。从自动化的角度来看,API可以让做事变得容易,像Ansible这样的无代理平台有潜力自动化和管理遗留(legacy)设备。例如,基于CLI的设备,其工具可用于任何网络环境。注意:如果一个CLI-only设备已经集成到Ansible中,它的机制就像如何通过telnet、SSH和SNMP等协议对设备进行只读访问和读写操作。随着路由器、交换机、防火墙等独立的网络设备不断增加API支持,SDN解决方案也应运而生。SDN解决方案的共同主题之一是它们都提供单点集成和策略管理,通常采用SDN控制器的形式。这是适用于CiscoACI、VMwareNSX、BigSwitchBigCloudFabric和JuniperContrail以及其他SDN提供商(例如Nuage、Plexxi、Plumgrid、Midokura和Viptela)的真正解决方案。这甚至包括开源控制器,例如OpenDaylight。所有这些解决方案都简化了网络管理,因为它们允许管理员开始从“box-by-box”管理(LCTT译者注:指单个设备逐个操作的意思)转向全网管理。虽然这是朝着正确方向迈出的一大步,但这些解决方案并不能消除变更过程中出现人为错误的可能性。例如,您可能需要配置单个GUI,而不是配置N个交换机,这需要很长时间才能实现所需的配置更改——甚至可能更复杂,毕竟他们更喜欢GUI!此外,您可能会针对每个应用程序、网络、区域或数据中心部署不同类型的SDN解决方案。在需要自动化的网络中,对于配置管理、监控和数据收集,这些需求不会随着行业开始迁移到基于控制器的网络架构而消失。控制器部署在大量的软件定义网络中,几乎所有的控制器都提供了一个暴露的RESTAPI。而且,因为Ansible是一种无代理架构,它的自动化非常简单,不仅适用于没有API的遗留设备,还适用于通过RESTAPI不需要额外软件的软件定义网络解决方案(LCTTAnnotation:指代理)。最终结果是,使用Ansible,无论有没有API,任何类型的设备都可以实现自动化。免费开源软件(FOSS)Ansible是开源软件,其所有代码均可在GitHub上公开访问,并且使用Ansible是完全免费的。它可以在几分钟内完成安装,并为网络工程师提供有用的价值。Ansible、开源项目或Ansible,Inc.,在他们交付软件之前,您不会遇到任何销售代表。这是一个显而易见的事实,因为它是一个真正的开源项目,但是,在网络行业中使用开源、社区驱动的软件项目非常少,但是逐渐增加,我们想明确这一点。还值得指出的是,Ansible,Inc.是一家公司,它需要赚钱,对吧?虽然Ansible是开源的,但它也有一个名为AnsibleTower的企业产品,它增加了一些功能,例如基于规则的访问控制(RBAC)、报告、WebUI、RESTAPI、多租户等,(相比以Ansible)更适合企业部署。而且,更重要的是,AnsibleTower甚至可以在多达10台设备上免费使用,至少,您无需花一分钱,也无需与无数销售代表打交道,就可以去体验它是否对您的组织有益。可扩展性正如我们之前所说,Ansible主要是一个为部署Linux应用程序而构建的自动化平台,尽管它从早期开始就已扩展到Windows。需要指出的是,Ansible开源项目并没有“自动化网络基础设施”的目标。事实上,Ansible社区更了解如何在底层Ansible架构中变得更加灵活和可扩展,从而更容易成为满足其自动化需求(包括网络)的扩展Ansible。在过去的两年里,已经部署了许多Ansible集成,其中许多是由行业独立人士部署的,例如MattOswalt、JasonEdelman、KirkByers、ElisaJasinska、DavidBarroso、MichaelBen-Ami、PatrickOgenstad和GabrieleGerbino,还有来自Arista、Juniper、Cumulus、Cisco、F5和PaloAltoNetworks等网络系统供应商的专利。集成到现有的DevOps工作流中Ansible在IT组织中用于应用程序部署。它用于需要管理部署、监控和管理各种类型应用程序的运营团队。通过将Ansible集成到网络基础架构中,它扩展了新应用程序到达或迁移时的可能性范围。而不是等待新的架顶式交换机(LCTT译注:TOR,数据中心设备连接的一种方式),添加VLAN,或者检查接口的速度/双工,所有这些都是基于网络。中央任务都可以自动化并集成到IT组织中已有的工作流中。术语幂等性(发音为item-potency)经常用于软件开发领域,尤其是在使用RESTAPI时,以及DevOps自动化和配置管理框架领域,包括Ansible。Ansible的信念之一是所有Ansible模块(集成的)都应该是幂等的。那么,幂等性对模块意味着什么?毕竟,对于大多数网络工程师来说,这是一个新名词。答案很简单。幂等性的本质是允许定义的任务运行一次或数千次而不会对目标系统产生不利影响,只是一次性更改。换句话说,如果要进行更改以使系统进入其所需状态,则在进行更改后,如果设备已经达到该状态,则不会进行进一步的更改。它不像大多数传统的自定义脚本和将CLI命令复制粘贴到那些终端窗口中。当在同一系统上重复运行同一命令或脚本时,(有时)可能会发生错误。即使将一组命令粘贴到路由器中,也可能会遇到使其余配置无效的错误。只是为了好玩?再举个例子,如果你有一个配置了10个VLAN的文件或脚本,那么每次运行这个脚本,同一个命令都会被输入10次。如果使用幂等的Ansible模块,将首先从网络设备中获取现有配置,并在配置每个新VLAN后再次检查当前配置。只有当这个新的VLAN需要添加(或者说,更改VLAN名称)是一个变化时,命令才会实际推送到设备。当一项技术变得越来越复杂时,幂等性的价值就更高。当你修改它时,你不能注意到现有网络设备的状态,而只是试图从网络配置和策略角度达到预期。地位。配置管理工具通过网络范围和临时(adhoc)更改解决的问题之一是配置“漂移”(当设备的所需配置逐渐漂移或更改时,手动和/或多个一个环境中的不同工具),实际上,这就是使用Puppet和Chef之类的东西的地方。代理将电话呼叫到前端服务器,验证其配置,如果需要更改,则进行更改。这个方法很简单。出现故障需要排除怎么办?您通常需要跳过管理系统,直接进入设备,找到它,修复它,然后走开,对吧?果然,下次代理恢复时,修复问题的更改被覆盖(基于主/前端服务器的配置方式)。在高度自动化的环境中,一次性更改应该是有限的,但是,仍然允许使用它们的工具(LCTT译注:指一次性更改)是非常有价值的。可以想象,这样的工具之一就是Ansible。因为Ansible是无代理的,所以没有默认的推送或拉取来防止配置漂移。自动化任务在Ansible
