徐浩波,郭宝贤
(国网电子商务有限公司,北京 100053)
传统软件开发使用瀑布式管理方式,软件更新迭代速度慢,线上运维运营响应缓慢。很多IT 企业开始使用DevOps 的开发模式,DevOps 已逐渐成为主流。通过自动化的方式减少安全漏洞检测和响应的时间,降低成本的同时也提高了信息系统的安全性[1]。国网建设基于DevOps 理念的仿真研发环境是大势所趋。
国网仿真研发环境在信息内网由各子公司分散建设,分配独立网段。由独立通信VPN 通道将各子公司环境串联起来,形成统一管理的研发仿真环境。基于“三库六环境”(“三库”代码库、依赖库、镜像库,“六环境”研发测试环境、公共服务环境、测试服务环境、验证培训环境、仿真靶场环境与生产环境),实现完整的DevOps 全研发流程管理,满足代码管理、程序依赖管理、程序包管理、项目管理、应用测试、业务验证等研发需求。此方案核心思路是将代码、构建、测试、部署、项目管理等多环节都移到信息内网完成,提升研发效率的同时,同步增强信息安全。
国网公司内越来越多的项目开始偏向移动化应用,在内网开发移动应用会面临以下几个难以解决的问题。
(1) 研发依赖组件、插件无法获取、无法更新,部分插件可能不支持离线安装。
(2) 移动应用与互联网三方服务有数据接口(如支付),在内网无法联调测试。
(3) 无法将内网程序制品同步至信息外网进行自动化部署。
Java 依赖库是指Java 应用在开发过程中依赖的三方jar 包,国内一般使用Nexus 进行jar 包管理。Nexus 通过repository manager 技术,将官方公开的jar 依赖同步至本地私服,从而安全获得三方jar 包。软件镜像站是指通过搭建文件服务器,实现在特殊网络环境下的三方软件包中转网站,目前国内比较出名的有清华大学开源软件镜像站、网易开源软件镜像站等。
在实际开发过程中,服务端代码编译依赖三方jar 包,web 端依赖三方的javascript 类库,开发常用的开源软件如eclipse,Intellij IDEA 等,都需要接入互联网才能获取。而国网仿真研发环境建设在信息内网,无法与互联网通信,所以需要建设Nexus 仓库和软件镜像站来解决上述问题。Nexus建成后,由维护人员手工将常见的依赖jar 的库离线维护到3rd party Repositories 仓库,并在外部系统记录已支持的jar 及版本。之后周期性地按外部系统记录进行内网Nexus 仓库的更新。对于不常见的依赖jar,可在业务部门发起申请后,由Nexus 维护人员进行补充添加。软件镜像站可由维护人员直接从互联网可信站下载,离线同步至内网软件镜像站,以上思路可基本满足研发终端对三方依赖和软件的需求。
类似Intellij IDEA,SourceTree 等需要联网激活的软件,因网络限制无法正常离线激活,所以需要有工具平台来对此类软件进行替代。专用一站式开发工具平台是此问题的重要解决思路,它从框架级减少了开发时对三方组件的依赖范围,并提供一站式的开发服务。国网体系内可以选择SGUAP 开发平台[2],满足研发端的工具需求。
国网公司仿真研发环境全部迁移至内网后,测试环境和研发终端由以前的外网变成内网,开发人员因网络限制将无法与三方数据接口进行联调测试。一个简单的解决方案是,开发人员使用互联网机器与三方接口进行联调,之后把对应的代码拷贝至内网研发终端。此方法成本小,但是涉及部分代码和数据安全问题,并对信息化系统架构要求较高,故不建议使用。
出入站API 的概念由Bilgin Ibryam 在InfoQ提出,为了让微服务足以应对未来的挑战,在设计微服务时需要加入数据流经的出入站API,入站API 是当今微服的常态,实现路由配置、负载均衡、限流熔断等能力,如zuul,soul 网关等。但出站API 用到的地方并不多。在国网仿真研发环境场景下,为了让由内至外的方法能够正常被路由调用,需要建设出站API 体系。
技术选型上因为国网公司的内外网物理隔离。所以短期无法选择已有的成熟API 框架直接实现出站方法调用。一种基于国网隔离装置安全的HTTP 服务网关实现方法在2019 年被提出,并于2021 年初被公布实现(见图1),它解决了内外网应用微服务互相调用问题。强隔离服务网关通过双向网关技术,接收客户端发起的网络请求并进行安全检查和过滤,将合法请求序列化后写入隔离装置,由隔离装置将网络请求转发给具体微服务提供方,实现双向的内外网接口交互,这样就可以完美解决当前国网研发仿真环境在内网部署不能与互联网三方接口交互的问题。
图1 基于国网隔离装置安全的HTTP 服务网关
国网仿真研发环境方案只对研发测试环境做了对应规划,现有的生产环境在整个方案中只提及了自动化部署,对于原有的内外网应用、纯外网应用如何部署未做说明。使用第3 节提出的出入口API技术,理论上可以将现有的所有外网部署应用全部迁至内网,外网只部署对应的出入API 网关,此方案无疑会大大提升国网信息化安全水平,但是外网应用迁移至内网,涉及大量技术架构调整以及运维配置工作,短期内较难实现。
在保留现有生产环境应用部署状态的前提下,要实现国网仿真研发环境的生产自动化部署,需要解决跨内外网的文件同步问题。文件安全一般使用安全签名技术来实现。对于将要传输的文件首先完成病毒查杀,然后选择合适的密级添加技术,保证其与信息主体不可分割、自身不可篡改[3]。之后使用java 程序实现文件流式读取的API,注册到隔离装置出入口API 网关,可以实现文件内外网安全同步。
Java 依赖库和软件镜像站理论上也可以使用上述文件同步技术作为辅助,使整体工作过程更加高效。
使用隔离装置的双向API 网关、软件镜像站、专业研发平台等技术,可以使国网仿真研发环境方案在纯内网环境落地实现。具体实现效果可能会因上述技术的成熟度而出现细节差异。上述问题解决方法可供国网仿真研发环境建设参考。