当前位置: 首页 > article >正文

OpenNJet:下一代云原生应用引擎,支持动态配置与高效管理,简化运维任务,提升应用灵活性与安全性。

OpenNJet应用引擎介绍:

应用引擎是面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,一般呈现为Web服务、流媒体服务、代理(Proxy)、应用中间件、API网关、消息队列等产品形态。

应用引擎在云原生架构中,除了提供南北向通信网关的功能以外,因为提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性,其地位和作用在云原生架构中变得愈发重要。

在这里插入图片描述

OpenNJet最早是基于NGINX1.19基础,fork并独立演进的开源应用引擎,并随着NGINX版本迭代,吸收上游NGINX的更新,已经同步更新到NGINX1.23.1版本。OpenNJet的目标在于适应国内特定的技术规范及标准,如国密算法套件支持,并构建安全可控的云原生数据面,支撑我国云原生产业生态。作为底层引擎,OpenNJet利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等。

在这里插入图片描述

相比市面其他类型的API网关,高性能是NGINX主要的优点,但动态配置能力的缺乏一直受到业界的诟病。OpenNJet在NGINX的架构上进行了扩充,对其框架进行了改写,增加了 C 及可持久化的动态存储能力,解决了指令配置变更动态生效的关键问题,扩展了OpenNJet的应用场景。此外,业界对应用引擎可观测性的需求,需要应用引擎持续不断的采集性能指标、日志数据以及注入跟踪信息,但这对应用引擎的性能造成了不可忽视的影响,OpenNJet利用Copilot framwork隔离了业务处理及配置变更和指标采集,避免了遥测对性能的影响。作为云原生的应用引擎,OpenNJet需要支持业界流行的Ingress及Sidecar的api规范,基于动态配置+ Copilot framework架构,NJet可以通过不断更新独立的相关Copilot module,实现对响应标准规范的及时支持。


如何通过 OpenNJet 部署 WEB SERVER?

NJet官方提供centos,ubuntu,cloudOS等多个版本的2进制安装包,及软件源。其中支持的有:

OS架构当前版本下载链接
Centos7.x​x86-64​3.0.0https://gitee.com/njet-rd/njet/releases/download/v3.0.0/njet-3.0.0-1.el7.x86_64.rpm
Ubuntu18. 04​x86-643.0.0https://gitee.com/njet-rd/njet/releases/download/v3.0.0/njet_3.0.0-1ubuntu.18.04bionic_amd64.deb
Ubuntu20.04x86-643.0.0https://gitee.com/njet-rd/njet/releases/download/v3.0.0/njet_3.0.0-1ubuntu.18.04bionic_amd64.deb
Ubuntu22.04x86-64​3.0.0https://gitee.com/njet-rd/njet/releases/download/v3.0.0/njet_3.0.0-1ubuntu.18.04bionic_amd64.deb
OpenCloud9x86-641.2.3https://gitee.com/njet-rd/njet/releases/download/v1.2.3/opennjet-1.2.3-1.ocs9.0.x86_64.rpm
TencentOS Server 2x86-641.2.3https://gitee.com/njet-rd/njet/releases/download/v1.2.3/opennjet-1.2.3-1.tl2.x86_64.rpm
TencentOS Server 2x86-641.2.3https://gitee.com/njet-rd/njet/releases/download/v1.2.3/opennjet-1.2.3-1.tl3.x86_64.rpm

二进制安装​:

OpenNJet 提供多个版本操作系统下的二进制安装文件,二进制包安装后,所有OpenNJet 相关的文件 都在 /usr/local/njet 目录下, 并在 /usr/lib/systemd/system 目录下添加service 文件。

在这里插入图片描述
不过,这里也发现安装完成后,不能像Nginx一样自动就启动,如果能自动启动就给力了,我们这里需要手动自己来启动一下。
在这里插入图片描述


【动态黑白名单配置】:

依赖模块,控制面参见上文控制面配置说明,数据面需要加载如下模块:

njt_helper_broker_module
njt_http_dyn_bwlist_module.so

配置指令:

动态配置无特殊的指令, 动态黑白名单的配置指令及格式与静态配置一致,使用 allow, deny 指定允许或拒绝的IP地址。

语法:        allow address | CIDR | all;
默认值:     --   
允许配置位置:    http, server, location
语法:        deny address | CIDR | all;
默认值:     --
允许配置位置:    http, server, location

以下为静态配置文件的示例:

worker_processes 1;
error_log logs/error.log info;
load_module modules/njt_http_dyn_bwlist_module.so;
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
helper broker modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf;

events {
    worker_connections  1024;
}
 upstream backend {
  server 10.10.12.1:8080;
 }
 
 http{ 
   dyn_kv_conf conf/iot.conf;
    server {
        listen       18888;
        location / {
           proxy_pass http://${backend};
        }
        location /test_bwlist {
          allow 192.168.1.0/24;
          deny all; 
          proxy_pass http://${backend};
       }
    }
 }
cluster_name helper;
node_name node1;

但是,OpenNJet提供了一种更好玩的形式,可以使用GET方法获取当前各location 的黑白名单配置,使用PUT方法更新黑白名单配置。PUT 提交时报文格式与GET获取到的报文格式一致,可以只提交需要改动的 location。

curl -X 'PUT' \
  'http://116.62.101.2:8081/api/v1/config/http_dyn_bwlist' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
        "servers": [{
                "listens": ["0.0.0.0:8080"],
                "serverNames": [""],
                "locations": [
{
                        "location": "/",
                        "accessIpv4": [{
                                "rule": "allow",
                                "addr": "172.16.94.0",
                                "mask": "255.255.255.0"
                        }, {
                                "rule": "deny",
                                "addr": "0.0.0.0",
                                "mask": "0.0.0.0"
                        }]
                }]
              }]
}'

我们可以先进行内网IP和本机IP的测试,使用curl来进行发送请求,可以看到都是可以请求成功了。

在这里插入图片描述

接下来,我们使用curl发送一个PUT的请求,来动态请求OpenNJet服务器的接口,这里先是让172.16.94.0这个区间段来允许可以访问,然后,本机0.0.0.0是拒绝的,请求返回{“code”:0,“msg”:“success.”}表示设置成功了。

不需要任何重启,不需要任何修改配置文件

在这里插入图片描述

最后,可以使用GET方法获取当前黑白名单静态配置信息。

curl -X 'GET' \
  'http://116.62.101.2:8081/api/v1/config/http_dyn_bwlist' \
  -H 'accept: application/json'

在这里插入图片描述

动态配置无特殊的指令, 动态黑白名单的配置指令及格式与静态配置一致,使用 allow, deny 指定允许或拒绝的IP地址。


http://www.kler.cn/a/594761.html

相关文章:

  • 【Docker入门】用Docker启动项目
  • Leetcode 378. 有序矩阵中第 K 小的元素 二分查找
  • 【uni-app】集成SQLite,无服务数据库
  • 上海蒂正科技有限公司:技术驱动数字化,打造高端企业门户新标杆
  • Web-Machine-N7靶机攻略
  • C# 派生 详解
  • ONE Deep模型:LG AI Research的开源突破
  • uni-app基础问题(一)
  • 后端框架模块化
  • Docker安装,并pullMySQL和redis
  • C#入门:从变量与数据类型开始你的游戏开发之旅
  • 京东物流数据+商品API融合应用:打造供应链智能预警系统
  • wps打开的excel如何插入、编辑、删除、显示批注?
  • 阿里云平台域名
  • 数据库与其所用数据结构
  • Stream 流中 flatMap 方法详解
  • 生成式AI三巨头技术解析:ChatGPT、DeepSeek与Grok的核心差异与未来竞争格局
  • 无人机硬件技术研发突破方向与技术解析
  • YOLO11改进|YOLO11中引入轻量级幽灵卷积GhostConv
  • 《保险科技》