民生银行网络专业数字化转型探索


随着大数据、云计算、AI、区块链等技术的快速迭代,金融科技的持续创新,掀起了银行业数字化转型的浪潮。为支撑民生银行业务数字化转型以及IT基础设施数字化转型,民生银行网络管理中心积极拥抱变化,探索NetDevOps在网络专业数字化转型中的实现与应用。

关于NetDevOps的定义,比较常见的一种是“将DevOps的文化、技术手段、思想以及最佳实践应用于网络建设和运维”。NetDevOps通过网络即代码(Network as Code,NaC)改变传统手工操作网络设备的模式。NetDevOps不仅实现自动化运维,更是“运维即开发”模式和思想的落地方法论。

目前网络自动化通常由网络运维团队将需求提交给开发团队实现。从需求提出、代码开发、测试一直到正式投产中间存在巨大的沟通成本和反复的功能测试、代码修改。NetDevOps可显著降低运维和开发之前的沟通成本,加快代码更新迭代频率,缩短新功能上线时间。根据团队自身的水平和经验,可综合使用厂商成熟的商用软件、开源工具或者自研工具实现NetDevOps。

本文将从NetDevOps流水线、相关工具、使用场景三个方面对NetDevOps进行讨论。

NetDevOps流水线

NetDevOps源于DevOps,因此可以借鉴DevOps流水线的思路。NetDevOps通过整合自动化工具和工作流程可显著降低人工工作量,提升版本发布效率。NetDevOps流水线取决于团队的自身需求和部门的整体工作流程。一个典型的NetDevOps流水线如图1所示。
1.jpg

图1:NetDevOps流水线
  • 网络即代码(NaC):NaC将基础设施既代码(Infrastructure as Code,IaC)的概念/思想应用于网络体系,即将网络运维视为软件工程,用编译代码并运行的理念完成传统运维操作。NaC不仅改变了网络的设计思想和运维方式,也改变了网络变更常用的工具和技术。
  • 构建:开发人员开发完成相应的功能代码后,需要将代码上传至代码仓库。经过审核后,触发构建过程。构建过程一般由工具自动化完成以实现快速迭代。在NetDevOps中,构建生成的最终产品可能是是Jar包、Docker镜像,也可能是变更步骤、模板等。
  • 测试/验证:为验证构建阶段生成的产品是否满足需求,需要进行测试验证,并根据结果完善代码。测试一般包括单元测试、集成测试、系统测试和验收测试。其中单元测试和集成测试可以使用硬件设备或模拟器。系统测试和验收测试需要使用硬件设备,和生产环境保持一致。
  • 交付/发布:此阶段指将实现新版本或新功能的代码交付和发布,是NetDevOps流水线中的里程碑。这个阶段意味新的版本或功能等已准备好部署到生产环境中并使用。
  • 部署:根据团队的使用经验和公司流程,可以在代码发布后,立即部署至生产环境,或者经过审批后,在特定时间段部署。金融机构都有严格的生产环境变更管理制度和流程,一般会选择经过审批并在特定时间段部署。这个阶段允许管理员限制新功能或新版本的使用范围。比如为规避风险,新功能一开始可能仅允许网络专业使用,一段时间后,再供其他专业使用。
  • 使用/反馈:在部署完成后,整个系统将开放给用户正式使用。在使用过程中,用户或运维人员可随时将需要改进的功能反馈至开发团队评估并实现。


在整个流水线中,无论在哪个阶段发现错误,应立即反馈开发团队,尽快解决问题。

NetDevOps相关工具

与DevOps类似,实现NetDevOps需要使用多种工具协同工作。在日常使用中,主要用到以下四类工具。

版本控制工具

版本控制工具主要用于NetDevOps流水线中的网络即代码环节。

在NaC里,网络设备的配置和变更均被视为代码,需要存储在具有版本控制功能的库里。这样的好处是可以快速追踪配置的变更记录,以及快速查询这些变更的变更时间、变更人员等信息,甚至可以利用工具快速回滚至任何时间点的配置。

版本控制工具分为集中式和分布式两类。集中式版本控制工具,如SVN,通过使用集中管理服务器保存所有文件的历史版本记录。使用者通过客户端连接服务器,获取最新的版本文件或提交更新。

分布式版本控制工具的客户端除了获取最新的版本外,也会获取整个完整的代码仓库,包括历史记录。任何一台服务器故障均可用任何一台客户端本地仓库的镜像恢复。Git是使用广泛并且开源的分布式版本控制工具,最初是Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git基础模型如图2所示。
2.jpg

图2:Git基础模型

模拟器工具

模拟器主要用于NetDevOps流水线的测试验证环节。

对于大部分金融机构,通常有充足的硬件测试设备用于功能测试和代码验证。对于简单的场景,在开发环境和测试环境中,为提升效率,可使用模拟器进行测试和验证。

常见的模拟器包括华为公司的eNSP、思科公司的Virl,华三的HCL,以及支持多厂商的GNS3、EVE-NG等工具。

自动化工具

手工变更比自动化变更会出现更多的操作失误。因此,除方案设计、初期测试等过程中可使用手工配置外,测试环境与生产环境应尽量选择自动化实施。

与服务器自动化可选工具较多不同,大部分网络设备不支持安装代理软件,只能选择支持无代理的自动化工具。适合网络使用的工具主要有Ansible、Nornir等。

Ansible和Nornir都是开源软件,且基于python开发,本质上都是通过SSH/TELNET/NETCONF/HTTPS等协议连接到网络设备,下发特定命令,并根据设备回显判断命令执行是否成功。但两种工具使用起来差别较大。Ansible主要通过编写yaml格式的playbook实现自动化功能,而Nornir则是基于python代码实现自动化功能。两个工具对比如下表所示:
3.png

Ansible与Nornir对比

此外,还有很多开源工具,比如NAPALM,以及厂商开发的商业软件也可支持网络自动化。网络团队可结合自身情况选择合适的工具使用。

CI/CD工具

CI/CD是一种通过在开发阶段引入自动化实现高效应用交付的方法。其核心概念是持续集成、持续交付和持续部署。CI/CD 工具是NetDevOps流水线中打通各环节的重要工具。

CI(Continuous Integration,持续集成)是在源代码变更后自动检测、拉取、构建并进行单元测试的过程。CI的目标是快速确保开发人员新提交的代码是正确可用的,适合与版本控制工具配合使用。

CD包含两个意思:持续交付(Continuous Delivery)和持续部署(Continuous Deployment)。持续交付通常是指在整个流程中,自动监测源代码变更并通过构建、打包和相关操作生成可部署的版本。持续交付在软件开发过程中的目标是自动化、高效率、可靠性、可重复性和保障质量。持续部署是指能够通过自动化方式将持续交付中所发布的版本给最终用户使用,提升版本发布效率。CD工具通常与版本控制工具、自动化部署工具结合使用。

Jenkins是广泛使用的开源CI/CD工具之一。Jenkins使用Java语言编写,通常与版本控制工具、构建工具、配置管理工具等结合使用。通过插件,Jenkins可实现很多功能,比如部署代码、启动vmware虚拟机,启动docker容器等。

NetDevOps使用场景

大部分网络日常运维和变更操作均可通过自动化手段由代码完成,减少重复性工作,减轻工作量,提升网络服务交付效率。NetDevOps主要有以下八种使用场景:

配置下发

配置下发是自动化使用频率最多的场景之一。任何通过CLI操作的行为均可被自动化工具替代。除了通过SSH登陆设备运行命令行外,自动化工具也可以通过RESTFUL API或NETCONF等协议调用接口实施相应的操作。

人工输入错误或其他原因会导致自动化推送错误配置,影响生产运行稳定。因此,在自动化下发配置前,应尽量进行逻辑校验,确保正确的下发配置。逻辑校验涉及三个方面:
  • 校验相关命令参数正确性,比如检查IP地址是否为标准IPv4或IPv6格式
  • 校验相关命令与设备是否匹配,比如检测到show run命令在华为设备上运行,应该立即中止执行
  • 校验是否符合某种逻辑判断,比如将某一接口VLAN ID配置为100,更改配置前,应确认该接口未配置任何VLAN ID或该接口状态为down,如不满足上述条件,应人工介入该操作


新设备上线

自动化可实现根据模板生成配置文件,并将配置文件推送至相关设备的功能。此过程需要整合网络设备配置模板文件和配置数据文件。模板文件根据不同的业务需求,基于不同厂商不同型号设备生成,并且模板内的参数需要预先设置好特定格式,便于后续替换。数据文件保存结构化的数据,比如VLAN信息,接口IP地址,静态路由等。使用数据文件渲染模板文件,生成最终的设备配置。之后使用自动化工具将配置推送至相关设备。

信息收集

所有网络设备均包含静态的配置信息以及动态的运行信息。静态的配置信息一般一天保存一次,通过CLI或API接口获取设备的全量配置信息,用于后续审计、应急恢复等场景使用。动态的运行信息一般通过SNMP协议或Telemetry协议每隔几分钟甚至几秒获取一次,监控网络设备的运行状态。该类数据通常包括CPU、内存、OSPF邻居、接口流量、运行时间、OS版本等。

合规检查

通常,各个金融机构都有网络设备的配置基线、安全规范等要求。在内部审计、外部审计检查前,可以定期使用工具对设备配置进行合规检查,并根据结果进行整改。

设备替换

在日常使用中,经常会出现由于设备生命周期即将结束或设备整机故障需要被替换的操作。对于同品牌同型号的设备替换操作,可通过工具获取设备最近的配置备份,倒入新设备即可。对于不同型号的设备替换,需要使用工具“翻译”配置信息,以便适用于新设备。

故障排查

故障排查、处理依赖处理人的水平和经验,导致定位问题时长和解决问题时长不一致。故障排查本质上是综合特定一台或几台的设备配置信息、运行信息、状态信息进行判断,进而定位故障原因。为减少故障定位时长,可以利用工具,将告警信息与特定处理流程、信息收集流程关联,自动获取相关的设备信息,用于故障辅助定位与处理。

配置分析

对于防火墙、负载均衡设备,网络维护团队经常会收到针对特定应用或IP地址的策略查询请求。人工处理效率较低,且容易遗漏部分策略。使用配置分析工具,则可高效、精确的反馈类似请求。

版本/补丁升级

在设备运行过程中,会遇到版本bug或厂商停止版本技术支持等场景,需要升级设备的补丁或版本。相比版本升级,补丁升级是一种快速、低成本修复产品软件缺陷的方式。这两种升级方式均需通过SFTP/TFTP等协议将特定文件上传至设备,然后使用特定命令激活。为降低风险,可分批次升级设备版本/补丁。

总结

NetDevOps最终的目的是将网络作为一种服务(Network as a Service,NaaS)提供相关人员使用。这些人员不仅包括网络运维人员,还包括系统运维、应用运维、安全运维甚至非IT部门人员。NetDevOps将“网络开发”和“网络运维”结合。运维人员职责不仅是网络管理和日常维护,还包括通过开发相应的工具,实现运维自动化和智能化。一些重复性工作的自动化不再依靠“研发人员”实现,而是依靠“运维人员”解决。NetDevOps将网络视为“代码”,将运维视为“开发”,为实现业务数字化转型的目标奠定网络架构基础。

原文链接:https://mp.weixin.qq.com/s/zefxJvLRvIgtwqMHVJI1iA

0 个评论

要回复文章请先登录注册