OpenNJet云原生应用引擎
OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,随着 NGINX 版本迭代,吸收上游 NGINX 的更新,已经同步更新到 NGINX1.23.1 版本,OpenNJet 具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。我们目标在于适应国内特定的技术规范及标准,如国密算法套件支持、构建安全可控的云原生数据面,支撑我国云原生产业生态。
技术架构:
功能特性
继承 nginx-1.23.1 所有功能, 并且100%兼容nginx |
|
OpenNJet 功能特性 |
|
Copilot框架 |
支持动态加载不同的外部copilot模块 |
支持外部模块异常退出的自动重启 |
|
KV模块 |
支持键值的查询及设置 |
支持键值的持久化 |
|
动态配置框架 |
支持控制平面的消息发送 |
支持RPC消息、组播消息
|
|
支持消息持久化 |
|
Cache-purge |
支持缓存清理 |
支持按指定前缀清理缓存 |
|
开启分片后修改源文件不会造成下载失败 |
|
health_check |
支持单独在helper进程开启健康检查,不影响数据面业务 |
支持运行时动态开启或关闭健康检查功能 |
|
支持校验返回http code |
|
支持校验返回http header |
|
支持校验返回http body |
|
支持https健康检查 |
|
支持国密https健康检查 |
|
Split-clients-2 |
支持蓝绿发布 |
支持运行时动态调整流量比例 |
|
黑白名单 |
支持黑名单方式进行访问IP的限制 |
支持白名单方式进行访问IP的限制 |
|
支持运行时动态设置IPv4的黑白名单列表 |
|
doc模块 |
支持location 级别通过doc_api 指令配置,实现对swagger、gui页面的访问 |
支持通过swagger 页面实现对各功能opentapi的访问 |
|
支持通过gui页面实现对动态模块配置修改的能力 |
|
telemetry(外部编译模块) |
支持http请求在不同server间的服务追踪 |
支持动态开关控制调用链的生成 |
|
正向代理(支持http/https) |
实现了HTTP CONNECT 方法支持http/https正向代理访问 |
vts模块
|
支持server的request、response、traffic、cache信息的统计,其中server的response可以按照response code进行分类统计,分类统计使用的response code为1xx、2xx、3xx、4xx、5xx |
支持upstream和cache信息的统计 |
|
支持通过内嵌的html页面进行统计信息的展示 |
|
支持通过Prometheus、grafana进行统计信息的展示 |
|
支持动态配置server的location统计开关,支持动态配置server的filter key |
|
国密支持 |
支持server中使用国密 |
支持反向代理中使用国密 |
|
支持国密双证证书 |
|
动态(国密)证书更新 |
|
动态access log |
支持运行中动态关闭access log功能 |
支持运行中动态修改写入的日志文件 |
|
支持运行中切换syslog服务器 |
|
支持运行中切换写入文件的变量 |
|
支持运行时增加日志format |
|
支持运行时修改日志format |
|
声明式API |
支持感知声明式模块注册 |
支持查询声明式模块查询 |
|
支持PUT方式更新声明式配置 |
|
边车支持 |
支持流量劫持,兼容istio 规则 |
支持协议识别 |
|
支持代理http1.1 |
|
支持 istio 的双向认证(service-to-service mTLS) |
|
动态location 支持 |
支持通过api 向vs 添加 location |
支持通过api 从vs中删除已经添加的location |
|
动态upstream api 支持 |
支持通过api,对http 或stream 中的upstream 信息进行查询 |
支持通过api,对http 或stream 中的upstream 的server 进行, 添加,修改,删除 |
|
支持通过api,对http 或stream 中的upstream 的统计信息进行重置 |
|
支持post 添加的upstream server 持久化或非持久化 |
|
动态域名upstream server |
支持静态配置upstream server 域名的reslove 属性,定时解析域名,根据域名对应的ip 增减结果,同步更新到upstream server 列表中 |
支持通过upstream api post接口,添加server 域名,并定时解析域名 |
|
Http 会话保持支持 |
支持cookie 会话保持 |
支持route 会话保持 |
|
支持lear 会话保持 |