首页 文章 精选 留言 我的

精选列表

搜索[低代码v2.0],共10000篇文章
优秀的个人博客,低调大师

OpenNJet KIC V2.0发布!

NGINX 向云原生演进,All inOpenNJet 概述 OpenNJet KIC(Kubernetes Ingress Controller)基于OpenNJet proxy的动态特性、高性能实现。弥补nginx 在云原生场景中应用的不足。提供了丰富的流量管理能力,如动态location、host/path路由、负载均衡、动态upstream、金丝雀发布、TLS Termination/SNI、TCP/UDP、WebSocket等。 本版本主要特性: 支持分片处理Ingress/VS CR 支持与ADC集成 支持HTTP头操作 支持TCP代理 支持跨namespace 支持WebSocket代理 支持UDP代理 支持动态NJet VS/Accesslog 支持TCP主动健康检查 支持动态worker 进程数调整 本文简要介绍了这些新功能。 架构图如下: 新特性概览 分片处理Ingress/VS CR 针对不同的Ingress/VS资源有专门的kic来处理,这就是KIC分片机制。 不同的Ingress/VS资源由ingressClass标识,Ingress资源可以通过注解kubernetes.io/ingress.class或者spec.ingressClassName来标识,而VS资源可以通过spec.ingressClassName来标识。 注意,这种分片机制中的每一片KIC我们称为一类KIC,且与IngressClass一一对应,一个k8s集群中,有多种Njet KIC,那么就需要创建多个IngressClass对象。每一类KIC可以有多个副本(对应k8s架构中的多个pod)。 分片机制,导致每种KIC拥有自己感兴趣的Ingress/VS资源,而不是k8s集群中的全量Ingress/VS资源。其旨在解决单类型KIC无法承受全量配置的压力的问题。 与ADC集成 KIC与ADC集成后,ADC可以作为KIC的前端LB,通过ADC进行管理客户端流量并最终负载均衡到KIC 服务。KIC完成了如下功能: ADC域名注册:KIC向ADC注册了被KIC管理的k8s集群中的服务的域名,比如通过k8s ingress、vs CR管理的服务。此功能可以让客户端直接通过域名进行请求(需配置ADC的DNS服务器为默认DNS服务器)。 ADC SlbPool注册:KIC向ADC注册了KIC服务关联的应用池(nodeIP+nodePort),此功能可以让ADC路由到KIC服务 ADC VS注册:KIC向ADC注册了一个VS,并关联第二步创建的应用池,此功能可以让客户端直接访问VS,实现 ADC可以作为KIC的前端LB ADC VS中的VIP与被KIC管理的服务的域名相对应。ADC VS中的VIP为一个公网IP,外部客户端可以直接访问。 整体架构 场景图: 交互架构图: HTTP头操作 OpenNJet KIC头操作,可以针对客户端请求头进行修改,针对被代理服务的响应头进行操作。包括用户自定义头和HTTP规范中定义的头。 TCP代理 KIC TCP代理可以实现对上游TCP服务进行代理。TCP代理提供负载均衡能力。TCP代理完全动态化实现,不需要OpenNJet进行reload操作。 被代理的TCP服务都会有自己listen的端口,被代理服务越多,需要listen的端口就越多,传统Nginx实现中每新增一个listen都需要reload配置,为了解决reload问题,我们采用端口转发的的方式实现TCP服务的代理。具体设计如下: OpenNJet stream配置中预先listen一个12003端口(被代理的TCP服务监听的端口都会重定向到12003)。 KIC通过客户定义的API,生成iptables规则,通过iptables规则,将要请求的TCP服务端口重定向到12003端口。 OpenNJet stream通过客户端访问的"TCP服务端口"匹配客户预先通过API配置的upstream。此过程通过stream map进行匹配。 OpenNJet stream把客户端请求发往匹配成功的upstream中的server(其中负载均衡由stream lua实现)。 iptables规则,以及map内容的更新使用API动态更新,避免了进行reload操作 OpenNJet 配置实现如下: map $njtmesh_port \$stream_upstream { } server { listen 12003 mesh; set $proxy_upstream_name \$stream_upstream; proxy_pass upstream_balancer; } 客户端请求的端口始终为TransportServer中listener的端口。被代理的服务不能使用的端口,因为KIC内部会使用,说明如下表所述: 端口 说明 80 http代理 443 https代理 12001 OpenNJet控制面 12002 tcp lua upstream 12003 TCP代理端口 12004 UDP代理端口 8080 stub_status与http lua upstream 8081 KIC pod readiness-port 跨namespace K8s内建的Ingress只能处理与其相同ns中的服务的路由,没法进行跨ns操作。跨namespace配置功能解决了此限制。 除了Ingress支持跨namespace配置,VS同样也支持跨ns配置,使用者可根据自身情况进行选择。 Ingress通过不同Ingress类型来实现这一个功能,Ingress本身是没有类型这一概念的,我们通过添加注解"njet.org.cn/mergeable-ingress-type"来表示。注解可以取如下表格中的值: 值 说明 备注 master 主Ingress 一个 minion 从Ingress 可以多个,通过host与master Ingress关联 相同host的master和minion可以在相同ns或者不同ns。 除了跨ns配置可以选择此功能,当一个host有大量的path时,单个Ingress维护起来较复杂时也可选择此功能来进行管理path。 VS CR与Ingress有同样的功能,但实现方式不同,VS CR通过引用一个子路由资源来进行跨ns配置,子路由是一个ns/name格式的字符串,用来表示VSR资源,VSR是一个K8s CR,为了此功能引入的一个新的CR。 WebSocket代理 WebSocket是一个独立的基于TCP的应用层协议,是一个全双工的通信协议。它与HTTP的唯一关系是它的握手被HTTP服务器解释为HTTP升级请求,当握手结束后与HTTP就没有关系了。协议有两个部分:握手和数据传输。握手阶段如下图所示: Ingress通过增加注解来实现这一个功能,我们通过添加注解"njet.org.cn/websocket-services"来表示。 注解名称 值格式 描述 njet.org.cn/websocket-services service,service2(逗号分割的服务名称) Websocket 支持 VS不需要任何配置。 UDP代理 KIC UDP代理可以实现对上游UDP服务进行代理。UDP代理提供负载均衡能力。UDP代理完全动态化实现,不需要OpenNJet 进行reload操作。 UDP服务代理实现与TCP服务代理基本一致,只是OpenNJet stream配置中预先listen一个12004端口(被代理的UDP服务监听的端口都会重定向到12004),而TCP预先listen一个12003端口。详细说明参考TCP代理。 OpenNJet 配置实现如下: map $njtmesh_port \$stream_upstream_udp { } server { listen 12004 udp mesh; set $proxy_upstream_name $stream_upstream_udp; proxy_pass upstream_balancer; } 动态NJet VS 与第一版相比较,我们将单server多location的方式实现HTTP host头匹配,和path匹配,修改为多server多location的方式,使用nginx 标准的server_name 实现host头匹配,但是是动态化更新配置的,不需要进行reload操作。第二版针对Ingress和VirtualServer没有增加额外其他功能。 动态Accesslog KIC Accesslog功能可以实现对某一个应用单独应用accesslog策略(包括开关状态、accesslog文件路径)。也可以通过njet-config ConfigMap进行全局设置,但是"某一个应用单独应用accesslog策略"优先级更高。 TCP主动健康检查 对于Transport Server 资源,支持配置一个TCP端口,主动健康检查将根据配置的检查间隔,检测该TCP端口是否正常监听,并根据检查结果对后端进行上线及下线操作。 apiVersion: k8s.njet.org/v1alpha1 kind: TransportServer metadata: name: testapp-tcp spec: listener: name: test-tcp protocol: TCP upstreams: - name: testapp1 service: testapp port: 80 healthCheck: enable: true interval: 20s timeout: 5s fails: 1 passes: 1 port: 83 action: pass: testapp1 配置说明如下: 字段 描述 类型 是否必填 enable 是否启用健康检查,默认false boolean No interval 检查的间隔时间。默认为 5 string No fails 失败几次后将视为下线。默认1次 integer No passes 成功几次后将视为上线。默认1次 integer No port 健康检查服务所在端口 integer No timeout 健康检查连接超时时间 string No 动态worker 进程数调整 支持通过ConfigMap资源,配置njet 实例的worker进程数目,ConfigMap中的配置项更新后,将触发worker进程数动态修改。 配置项 说明 字段类型 默认值 备注 worker-processes Worker 进程数 (允许设置的值 1 - 512) String 默认是auto根据cpu核数自动生成的进程数 参考链接 OpenNJetKIC用户手册 OpenNJet KIC源码地址 NJet应用引擎通过内核重构实现了独特的运行时动态配置加载能力,是新一代高性能 Web 应用引擎。NJet 拥有高性能数据面处理能力,将集群、高可用、主动健康检查、声明式 API 等多种辅助功能,通过 NJet 独特的副驾驶 CoPilot 服务框架调度,从而方便功能扩展,隔离管理 / 控制功能对数据面的影响,NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。邮件组官网

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册