软件定义网络(SDN)的定义继续扩大,今天包括配置自动化和编排等功能。虽然这些任务不是严格意义上的SDN,但事实是,在这两种情况下,软件都是用来定义网络基础设施的某些方面的,所以供应商已经扩展了SDN的定义,将配置自动化和编配平台纳入其中。公平地说,这条线变得模糊了,因为一些现代编配系统使用编程接口来提供网络,而不是传统的配置工具(如SSH或SNMP)。
在许多组织中,自动化网络设备的配置是“SDN”最初获得支持的地方。这样做的原因很简单:配置网络设备非常复杂。随着厂商在路由器、交换机、防火墙和应用程序交付控制器中构建更多特性,配置这些设备所需的命令行语法越来越多地包含选项和语法选择。基于web的gui通常是CLI的替代选择,但导航速度很慢。Web gui也有一种混淆功能的方法,将它们隐藏在不太可能的页面中,使对它们的访问经历一系列恼人的点击。
传统网络设备配置的共性在于人类——无论他们使用的是CLI还是GUI——而且,尽管我们有相当多的优点,我们在语法、完美输入长串数据或记住复杂任务的每一步方面都不如计算机。根据我的经验,人类是导致网络中断的头号原因,网络工程师犯了一个无心的错误。
要求一个人改变一个生产网络就像要求一个人更换汽车上的空气过滤器。当汽车的引擎运转时。汽车在高速公路上以每小时70英里的速度行驶。
这能做到吗?是的。应该这样做吗?嗯。看起来有点冒险。然而,组织每天都要承担这些风险,经常通过计划的维护窗口来降低风险。然而,即使是这些窗口也不能改变一个事实,即现代网络预期是100%在线的。
多年来,服务器管理员一直在使用几种不同的工具自动化可重复和复杂的任务。网络设备不是服务器,但是最近,来自服务器世界的一些工具正在被网络社区使用。这些工具解决了设备配置中的复杂性和人为错误问题。这些工具也可以被认为是SDN旅程中的一个渐进步骤。虽然配置自动化不是纯粹的SDN,但它确实能让组织更接近SDN。让我们来看看介绍这一新兴趋势的一些工具。
Python。在这个列表中,Python编程语言排在首位,因为它是广泛可用的、流行的、有良好文档的,而且许多人认为它易于使用。此外,一些可能用于网络配置的其他工具是用Python编写的。因此,Python是一个灵活的、多用途的工具,网络工程师一直在使用它直接或间接地帮助他们进行网络配置。
使用编程语言创建网络设备配置背后的主要思想是,程序既能确保可预测的结果,又能遍历重复的任务。例如,假设一个组织需要为100个交换机构建配置,除了主机名和VLAN成员资格等细节外,这些交换机的配置都是相同的。可以用Python编写程序来一次又一次地生成所需的配置,在每次迭代中替换特定开关的惟一元素。不是工程师手工构建每个交换机,复制和粘贴配置的部分,并确保在需要时交换出唯一的位,而是一个程序完成所有这些工作。
Python远不是唯一可以做这种工作的编程语言。对于上面描述的简单任务,所有种类的选项都是可用的。但是Python有一个强大的库集来访问网络设备,这使得创建配置和应用这些配置都相对容易。
值得注意的是,网络供应商正在为他们的设备编写支持Python的api。例如,Cisco onePK支持Python, Arista的EOS-API可以通过Python访问,Juniper已经发布了一个“PyEZ”库,允许通过Python访问Junos设备。
Jinja2。Python可扩展性的一个例子是Jinja2。Jinja2是一个充当模板引擎的Python库。模板用于重复的代码位,其中可能只有几个变量在设备之间发生变化。在网络工程中,模板对于配置在特定类的所有设备(如路由器)上相同的大块代码或设备中描述接口、vlan、vrf等的代码段很有用。
Jinja2将模板功能添加到Python中,使得网络工程师能够遍历设备上的所有接口,为每个接口添加惟一的描述和VLAN分配,而无需单独手动配置每个接口。由于大多数数据中2020欧洲杯预赛心的所有接口都有一组标准的命令,因此在使用Python生成配置时,Jinja2模板既节省了时间,也减少了潜在的错误。
傀儡。对于那些不想学习编程语言的人来说,服务器世界中有几种流行的配置工具可以考虑用于网络设备配置。Puppet、Chef、Ansible和Salt是最常用的名字。在网络社区中,Puppet和Ansible拥有最强大的追随者。
Puppet是一个模型驱动的配置工具,它依赖于客户机-服务器体系结构,将配置从控制服务器交付到正在配置的客户机设备。
在网络世界中,足球竞猜app软件这是一个挑战,因为Puppet服务器需要与客户机系统上运行的Puppet代理进行对话。对代理的需求排除了许多网络设备,因为大多数网络设备无法使用Puppet代理。在网络空间中使用Puppet的最初动力是扩展已经部署在许多企业中的工具的功能,以管理服务器。如果Puppet可用并且已经被组织使用,为什么要使用不同的工具来配置网络设备?
Puppet使用自己的人机友好语言,允许人们描述他们希望设备如何配置。Puppet服务器将该清单转换为适合该设备的配置,生成目录。Puppet代理定期轮询Puppet服务器以检索任何新目录,并进行所需的更改。
Puppet可用于配置数量有限的Cisco设备,以及Juniper、F5、Mellanox、Arista和其他设备。请注意,“Puppet支持”并不意味着Puppet一定会支持所有网络设备的功能。事实上,大多数网络工程师发现,他们可以通过Puppet实际配置的功能是有限的。
Puppet有开源版本和商业版本。
Ansible。与Puppet在整体上相似,Ansible越来越受欢迎,部分原因是它的设计是一个无代理推送架构。Ansible通过SSH、NETCONF或为远程设备编写的模块中指定的其他方式与远程网络设备进行交互。经常使用SSH,尽管这不是Ansible使用者必须过度关注的事情。该模块处理将预期配置获取到远程设备的工作,无论使用何种方法。
网络工程师使用剧本描述他们想要的网络配置。playbook是用一种易于阅读的语言YAML编写的。就像Puppet受限于它所支持的特定网络功能一样,Ansible受限于设备模块中描述的功能。
除了它的无代理特性之外,Ansible还因其易用性和灵活性而越来越受欢迎。和Puppet一样,Ansible也有开源和商业化的版本。
网络工程师发现一些其他有用的工具,如自动化他们的网络配置:
Github是一个免费使用的在线代码库,包含版本控制系统。最近,Github已经成为获取网络配置自动化相关代码的首选站点。Cisco、Arista、Juniper、Mellanox和其他网络供应商都有免费的代码,这些代码支持其网络设备的配置或与云计算平台(如OpenStack)的集成。
Vagrant,用于自动创建虚拟机。由于许多网络设备都可以作为虚拟机使用,Vagrant作为在VirtualBox、VMware和其他管理程序上自动启动网络设备vm的一种方法变得非常有用。Vagrant还可以调用Ansible或Puppet来提供实例化后的虚拟机。
接下来是什么?
对自动化网络设备配置感兴趣的网络消费者需要密切关注SDN空间中的新兴技术。api的重要性不断增长,它提供了对SDN控制器、插入控制器的软件模块以及位于这些控制器之下的网络设备的访问。现在,由一个自制的Python程序或Ansible剧本完成的配置工作可以(在某些情况下)由一个软件定义的应用程序完成,该应用程序需要与提供网络设备的控制器进行通信。
事实上,一些SDN平台将网络设备配置工作完全从人类的手中夺走。例如,网络工程师在NEC programableflow交换机上所做的唯一工作就是将交换机指向控制器的IP地址。其余的配置是通过控制器本身完成的。
换句话说,使用本文中描述的工具自动化网络设备的配置确实是增量的。人们仍在明确VLAN编号和路由配置等细节,但使用比CLI或GUI更好的工具来生成和安装所需的配置。
最终,SDN甚至打算去掉这类需求,允许企业将其需求表达为与安全性和应用重要性相关的策略。这些抽象的策略描述将导致软件定义的网络设备配置,满足业务需求并确保用户体验和法规遵从性。这个行业目前正在进行的斗争是关于如何精确地抽象、表达和以编程方式实现复杂性。目前,使用功能强大的工具来自动化网络配置是组织开始的一个很好的地方。