云原生应用引擎-OpenNJet
2024-01-02 15:01:37 阿炯

OpenNJet 应用引擎是基于 Nginx 的面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如 API 网关、消息代理、出入向代理,负载均衡,WAF 等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。采用C语言开发在MulanPSL-2.0协议下授权。


OpenNJet 最早是基于 Nginx 1.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 指令配置,实现对swaggergui页面的访问

支持通过swagger 页面实现对各功能opentapi的访问

支持通过gui页面实现对动态模块配置修改的能力

telemetry(外部编译模块)

支持http请求在不同server间的服务追踪

支持动态开关控制调用链的生成

正向代理(支持http/https

实现了HTTP CONNECT 方法支持http/https正向代理访问

vts模块

 

 

支持serverrequestresponsetrafficcache信息的统计,其中serverresponse可以按照response code进行分类统计,分类统计使用的response code1xx2xx3xx4xx5xx

支持upstreamcache信息的统计

支持通过内嵌的html页面进行统计信息的展示

支持通过Prometheusgrafana进行统计信息的展示

支持动态配置serverlocation统计开关,支持动态配置serverfilter 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 会话保持



最新版本:2.0
在2023年12月下旬发布的 v2.0.0 版本中,对基础框架进行了大幅优化,增加对 HTTP/3 的支持,进一步丰富了 OpenNJet 的生态,动态能力逐渐成熟。此次更新主要包括以下五个方面:
基础框架大幅优化:框架的优化对于 CoPilots 进行了加固,实现了 lua vm、高权限执行框架、配置沙箱等能力,从而进一步提高 OpenNJet 的稳定性以及执行效率。
成熟的动态能力:对模块继续进行动态化改造,优化了动态证书管理,覆盖企业灰度发布等关键场景,动态 location 能力在 v2.0.0 已经进入成熟阶段。
加入新协议 HTTP/3:主要实现了 HTTP/3 的 Server 能力,以及 ftp 协议的代理能力。在安全的基础上实现灵活的负载均衡
继续强化高效安全:强化系统安全,加固自身;实现了业务安全,业务修复无损性能,更好的保护数据、提供可靠的服务,并简化运维任务。
两个企业特性:实现集群的基本构建,从而避免在故障转移、集群扩容新增加节点等人工操作,减少业务中断时间而无损性能;尝试引入智能化,合理分配资源。


官方主页:https://njet.org.cn/