基于Portal的NJet模拟环境

🙈 By 王志伟 2025-10-24

背景介绍

作为开发人员,经常碰到的问题是代码开发、测试都是好的,但在客户现场/生产环境,总是出各种各样的问题。这种问题,有可能是实现的逻辑,但更多的情况是现场人员的配置问题导致。因此开发人员需要一个和现场完全一致的环境,进行现场的故障复现,配置验证。

NJet作为应用引擎,应用场景复杂,配置灵活,当然也面临此类问题。为了快速模拟 NJet 配置,验证整条业务链路是否通畅,同时检验系统在高压、大配置数据场景下的承载能力,并确认证书、限流等关键机制是否生效,NJet的模拟环境应运而生。我们期望通过该环境:

  • 自动构建、完全模拟客户的网络环境拓扑
  • 可视化验证客户的配置有效性
  • 可进行批量/单独的功能测试
  • 能够进行域名解析,证书校验,客户端地址等模拟,辅助功能验证

同时,出于简化GUI管理的目的,该模拟应用利用NJet存在的Portal能力,避免了相关的认证授权的开发工作。

NJet模拟应用的安装

随NJet4.0发布,NJet发布了模拟应用的安装包,因此需首先安装Portal安装包,在Portal部署完成后,通过GUI安装模拟应用

  • 参考 https://njet.org.cn/cases/njet_portal/ 安装NJet Portal
  • 在portal 上添加 “Portal版NJet模拟环境应用, 目前发布的模拟应用包为simulate-app_1.0.2.npk,请从NJet的release站点下载

img

  • 模拟应用授权

img

如上图所显示,模拟应用部署后,请参考 https://njet.org.cn/cases/njet_portal/ 对模拟应用完成授权,用户关联。

  • 模拟应用配置

为支持网络拓扑模拟,以及调用可示化,模拟应用需要特定的配置,如下。请维持如下

img

  • 登录portal应用后,就可以看到模拟应用了

img

功能展示

配置导入

  • 功能模拟依赖于导入配置文件,目前配置文件需要使用json格式,目前需要手工把nginx格式的配置文件转换为json,paste或上传,在下个版本中,将直接支持nginx.conf格式的配置
  • 除导入外,模拟应用中也提供了多种示例配置,供参考
  • 除配置文件外,还可以配置模拟访问的特定的client ip,供特定的业务模拟使用

如下图所显示,可以看到页面中有很多实例配置,可自由切换,也可以导入JSON文件的配置

img

拓扑展示

如点击 示例配置1 (无证书)可直接进进入模拟页面,该页面直接生成了包括客户端->proxy->应用服务的网络拓扑,并详细描述proxy层面的业务配置,需着重说明的是,模拟环境中显示的IP地址,完全模拟了实际客户环境的地址。如下图所显示,展示了一个具备两个server的proxy层配置(test.backenda.com和test.backendb.com)

img

业务流程验证

在模拟环境中,下侧为web terminal,可以输入特定的命令,单条或批量发送HTTP请求,验证配置的正确性。目前内置了curl和wrk命令,前者进行单条的功能测试,后者进行批量的测试

  • 单条测试

如下图所显示,单条测试中,在GUI界面可以看到完整的执行路径(图上的虚线涉及的点),比如通过curl发了一条到testbackenda.com的请求,可以从图上直观的看到,请求直接由proxy层的path “/”处理了,没有转发到后端的应用服务

img

  • 批量测试

为了验证配置中某些特定的功能,如限流等,可以在web terminal输入wrk命令进行压测(批量命令的执行路径不会更新到GUI中)

img

其他功能

模拟应用除上述展示的能力外,还实现了如下功能,详情参考NJet docs站点,具体有

  • 通过导入证书,可以完整的模拟HTTPS proxy能力
  • 完整的模拟历史,供配置分析
  • Web terminal的实现帮助
  • 客户端ip地址的任意更换,支持特定的算法
  • 超大规模的模拟配置支持(可支持多大512个server,1000个location,512个后端服务)

参考说明

  1. 目前只支持json格式的配置导入,json格式请参考,json配置文件支持
  2. 依赖NJet 4.0.0
  3. 出于安全考虑,NJet安装后,需要修改 agw_admin密码才能进行portal应用的安装
  4. 在下一版本中,将直接支持nginx.conf格式的导入,从而服务于nginx向NJet的迁移