基于Ansible的无代理运维系统设计与实现
2022-11-05凌明胜汪文娟邹晓华
凌明胜 汪文娟 邹晓华
(1.常州信息职业技术学院软件与大数据学院 江苏常州 213164; (2.河海大学常州校区教务处 江苏常州 213022; (3.常州信息职业技术学院科技处 江苏常州 213164)
0 引言
传统运维平台对客户机进行管理和监测,需要在客户机安装客户端软件[1],由客户端软件接受服务端发送的命令,进而完成软件服务部署和性能数据获取[2]。该客户端软件是否会窃取其他非业务数据,是企业运维人员无法进行判断的。此外,企业在发展过程中无法做到对运维管理的统筹安排,导致运维工具很多,但功能单一,效率低下。为解决以上问题,本文提出一种无代理运维系统设计模式,无需在客户机安装任何软件即可实现软件运维与性能监测。同时,集多种运维功能为一体,提高运维效率。
1 Ansible技术引入
本文将Ansible和Web相结合,根据用户需求和运维操作习惯,开发基于Ansible的在线运维系统,相比传统运维系统有以下优势:
1)无代理模式。系统采用Ansibe技术,与被管理的客户机仅需网络互通即可,无需在客户机安装任何软件。同时,网络管理员可配置相关网络只允许运维管理流量通过,进一步保障企业数据隐私安全。同时本系统支持局域网内运行,无需连接互联网,可通过手动方式更新。
2)效率高。系统基于Ansible的PyYAML模块,开发剧本自动生成运行功能。用户可在Web平台中发起多条不同紧急程度任务,后台程序根据用户需求启动多线程并行处理,快捷高效。
3)操作简单。开发一整套的Web平台,将后台定制化程序脚本流程化,便于用户操作。用户只需输入关键字,由后台程序自动拼接成完整的PlayBook,并交由后台程序检验执行。
系统网络结构如图1所示,本系统运行于企业内部局域网中,通过核心交换机与企业服务集群网络相连,实现虚拟网络隔离。网络管理员可通过配置核心交换机,实现对无代理运维系统的流量限制,仅允许运维相关操作到达企业服务集群,保障企业服务安全稳定运行。同时,本系统可通过堡垒机经由企业防火墙,为外部工作人员提供运维服务,以方便解决紧急状况。
图1 系统网络结构图
2 系统架构
本系统基于Linux操作系统[3]开发,采用C/S模式。通过Ansible工具与Django框架的结合来调用Ansible的Playbook模块,使用bootstart编写Web页面。同时,根据不同端口划分,实现对不同版本的Linux系统和Windows系统管理。
系统运行流程如图2所示,无代理运维系统作为服务端,同时为用户和企业服务集群提供服务。一方面,用户在Web平台中发出的指令数据会直接传输到服务端,由服务端接收并解析;另一方面,服务端将解析后的数据转化为对企业服务集群机器的管理命令,并控制企业服务集群机器执行命令返回执行结果。
图2 系统运行示意图
其中,为减少远程管理和软件部署的时间,企业服务集群和无代理运维系统需处于同一大型局域网中,满足两者数据通信需求,提高效率。同时,为方便Ansible模块完成对企业服务集群的远程控制,需要保证SSH服务畅通,并能够通过Ansible_ping命令完成连通性测试。
用户通过服务端机器IP地址和端口号访问服务平台,从平台上进行资产管理、服务部署、文件修改等功能操作,并将操作日志和结果的详情信息保存到MySQL数据库中,便于专业人员对执行过程分析排错。
系统功能架构如图3所示,系统由用户层、数据层、服务层和对象层构成。
图3 系统功能架构图
用户层:该层是通过Web UI的方法展现用户,使用户操作更加直观简洁。用户可通过用户名和登录密码进入系统,登录服务系统的管理页面,可根据使用者的需求进行相应的操作。
数据层:该层主要包括日志、服务器、用户三个部分的数据。其中,部署日志主要包括储存对于用户部署服务器后返回的结果,以方便日后进行查阅。服务器数据主要包括服务器添加时或修改时所添加的主机信息,例如IP地址、主机名称、主机密码、服务器版本号等相关信息,可在日后部署时通过Ansible直接调用数据库中储存的服务器信息,缩短部署运维的时间。用户数据主要保存使用者的用户名、密码、使用权限以及该用户下所储存的服务器信息,便于日后的导出与导入。
服务层:该层是整个部署系统的核心,其可为用户提供各种服务。例如远程命令执行、文件修改、大文件传输、服务管理、软件更行与安装等相关功能。
对象层:该层主要是指接受控制的服务器以及虚拟机,本服务部署系统可实现对Linux和Windows主机的同时操控。
3 系统功能分析
基于Ansible的无代理运维系统主要分为三个功能模块,分别是资产主机管理模块、资产主机服务部署模块和用户模块。用户在Web界面中选择相应功能并下发指令,后端解析转化所接收到的指令,找到目标机器IP地址及账户信息,通过Openssh建立通信链路,操控目标机器运行指令并回传结果。
3.1 资产主机管理模块
资产主机功能模块运行于服务层,从以下五个方面为用户提供便捷管理方案:①服务端默认每隔10分钟获取客户端主机信息,例如:CPU、内存、磁盘使用率等信息,并自动存盘写入数据库中。同时提供信息更新时间间隔自定义功能,用户可根据具体机器状态选择信息更新时间。②对于企业内不同部门或不同用途的机器,可创建主机组,将机器分别加入对应主机组中,便于用户查看与管理。同时,对于某些特定用途机器,用户可对其进行全局状态标定,以防被误用。③提供主机批量关机、重启、待机等操作,以便于安全检修或某些需重启更新内核数据的服务部署。④通过Cron或Crontab提供指令定时执行功能,尤其是对企业服务影响较大的操作,可定时在凌晨或任意其他时间进行。命令在指定时间执行后,系统会提醒用户可在平台中查看命令执行结果。⑤实现主机性能风险报警功能,用户可在Web平台中设置性能阈值,如:CPU使用率是否超过80%,当使用率超过80%时,系统会向用户注册时所使用的邮箱或者手机号发送邮件或短信,提醒用户性能存在风险。
同时,对于一些企业需要部署几百台甚至上千台机器的情况,本系统提供批量主机添加功能。先将服务器IP地址、端口号、用户、密码等相关信息录入特定的Excel表格内,然后通过Excel表格批量导入多主机部署平台中。对于同处一个网段中的机器,也可以由用户设定IP段范围,系统通过服务发现功能,采用Nmap技术自动扫描网段中存活的机器,并加入资产信息中,由用户审核无误后导入资产组。为防止服务器密码的泄露,系统针对服务器密码采用AES加密算法,用户需要通过密码认证后方可查看,并限制复制粘贴操作。
3.2 资产主机服务部署模块
资产主机服务部署模块如图4所示,主要包括软件安装与更新、远程文件修改、大文件传输和服务管理四项功能。
图4 资产主机服务部署模块
软件安装与更新功能主要采用Ansible的Yum模块,通过执行Playbook剧本或单条命令,实现批量资产主机多软件安装。对于Windows操作系统,需要调用Powershell模块完成软件安装。用户在Web页面中勾选资产主机以及所需执行的指令,若命令没有在平台中列出,用户可以根据平台提示输入相应关键词。用户提交请求后,Web平台会将资产ID和待执行指令通过特定格式发送到系统后端,由后端根据资产对应操作系统生成不同命令,并调用Ansible相应模块远程控制资产主机执行该命令。最终,命令执行完毕后,系统自动分析执行结果,若执行失败,则将报错信息直接返回用户界面,以便于查看分析;若执行成功,则直接返回“执行成功”。同时,系统也会将执行结果写入数据库日志表中。
远程文件传输与修改的主要功能是在不影响目标主机正常运行前提下,进行文件上传或文件修改。服务部署运行逻辑如图5所示。用户在Web页面选择要修改或者上传文件的目标服务器以及修改和上传后的文件路径,平台会把这些数据打包并交给系统后台进行分析处理。系统后台会把这个操作记录添加到用户数据库的日志表中,根据数据的类型选择调用Ansible中Copy、File和Shell模块远程操作目标主机,修改目标主机中的相应文件或者上传指定文件并保存到指定目录,执行成功后会将结果返还给用户并更新日志文件。
图5 服务部署运行逻辑图
对于大文件传输采用TCP协议,建立专用虚拟链路,以保证文件传输的可靠性。
服务管理功能主要通过Ansible的service、Command、Cron、Service模块实现对目标机器上服务状态监测与管理。企业对于其所提供的对外服务是否出现问题,通常是由使用者发现并反馈,而无法自主发现进而修改更正,影响用户体验和耽误正常业务流程。系统服务管理功能可实时监测机器重要服务状态,一旦发现异常立刻提醒相应服务管理员对其进行处理,提高了服务可靠性。同时,系统会将服务异常状态及处理日志添加到资产日志表中,便于用户根据异常信息完善服务性能。
3.3 用户模块
用户模块包括前端展示和后端处理两部分,实现用户中心与用户管理两个功能。其中用户中心用于管理个人资源与信息,可以进行资源的管理、更新、修改与删除等,并实时监控自己的资源状态与操作。
用户管理模块仅具有管理员超级权限方可进入,通过设置不同角色具备不同资源操作权限,完成对普通用户及全局资源监控管理。当普通用户需要开通某一权限时可以向系统管理员申请,系统管理员收到后可赋予该用户相应权限并指定该权限的使用时间,当普通用户使用该权限后系统会向系统管理员邮箱发送操作日志;当普通用户对系统进行大批量的删除操作时需要向系统管理员进行申请(该系统的阈值设置为20,系统管理员可更改);系统管理员可更改用户信息与密码,为用户分配资源。同时,管理员用户可以为普通用户开通或者关闭相关权限,例如当管理员用户赋予普通用户查看系统运行日志的权限,则用户便可以查看日志;否则普通用户在进入查看系统运行日志页面的时候,系统将会提示用户没有该功能的操作权限。
此外,当使用者在注册新用户时,需要输入手机号或者邮箱地址,通过输入获取的验证码才可进行注册。在该模块中加入了弱密码检测功能,用户需要将密码设置为最少包含三种不同字符以上,才可以设置成功。
资产管理页面如图6所示,采用MVC框架,左侧栏为资产组分类,例如:信息部、研发部、人事部等。右侧下方为用户添加的资产主机信息,包括全局唯一的ID值、资产名、IP地址、操作系统等。右侧上方罗列了对资产主机的增删改查功能,同时也包括软件安装、文件传输等功能。对于资产服务管理和资产性能数据则在各资产详细信息页面显示。
图6 资产管理页面
系统经过部署和测试,得到的反馈数据显示,用户在多主机服务部署的过程中部署时间减少50%,且不同于传统运维的命令行方式,操作简单易于使用。此外,系统采用容器化部署方式,配备有Dockerfile文件,可快速生成容器镜像,由docker-compose完成系统部署,方便移植也更易于管理。
4 结束语
本文设计的基于Ansibe无代理运维系统,以容器的形式运行于服务端机器,无需在客户端机器安装任何代理软件,即可实现服务安装更新、文件传输、服务管理等功能。同时,为用户提供Web界面,便于查看或下发操作指令。经部署测试,该系统能够为运维人员提供便捷高效的运维平台,在提高客户端机器服务部署安装的同时,保障企业业务隐私数据的安全,对未来企业集群服务运维方式的改革具有一定参考价值。