OpenNJet KIC v1.0发布!K8s Ingress Controller
NGINX 向云原生演进,All in OpenNJet 概述
- 支持Ingress API、支持path/host路由
- 支持自定义资源VirtualServer,支持path/host、高级(header、请求方法等)路由
- 支持动态Upstream
- 支持Upstream 负载均衡, 支持round-robin 及 consitent hash 算法
- 支持Upstream 主动健康检查
- 支持 TLS SNI
- 支持Prometheus 指标采集
新特性概览
Ingress API
资源变化 | OpenNJet配置信息变化方式 | ||
Ingress资源变化 | 删除新建 | Ingress | 动态location API 动态Upstream API |
内容 | host | 动态location API | |
path | 动态location API | ||
service | 动态Upstream API | ||
pod动态扩缩容 | | endpoint | 动态Upstream API |
VirtualServer CR API
header
、 cookie
、 argument
、 variable
。 以下是一个VS的示例:
apiVersion: k8s.njet.org/v1 kind: VirtualServer metadata: name: cafe namespace: default spec: host: cafe.example.com.vs routes: - action: pass: details matches: - action: pass: tea-post conditions: - value: POST variable: $request_method path: ~* \.html$ - action: pass: ratings matches: - action: pass: productpage conditions: - cookie: version value: v2 - value: GET variable: $request_method path: /productpage upstreams: - name: ratings port: 9080 service: ratings - name: productpage port: 9080 service: productpage - name: tea-post port: 80 service: tea-post-svc - name: details port: 9080 service: details
上图VS中,配置了两个路由:
- path为\.html$ 的正则匹配,匹配以.html结尾的请求,实现高级路由(请求方法为POST的请求被路由到
tea-post
upstream,其他请求被路由到details
upstream(默认处理)) - path为/productpage的前缀匹配,实现高级路由(请求方法为GET且cookie 为version=v2的请求被路由到
productpage
upstream,其他请求被路由到ratings
upstream(默认处理))
动态Upstream
OpenNJet KIC配置当中会生成一个默认的被称为"upstream_balancer"的upstream,此upstream会处理所有路由。当真实流量到来时,会交由内部lua上下文处理。"upstream_balancer"配置如下:
upstream upstream_balancer { ### Attention!!! # # We no longer create "upstream" section for every backend. # Backends are handled dynamically using Lua. # ### server 0.0.0.1; # placeholder balancer_by_lua_block { balancer.balance() } keepalive 320; keepalive_time 1h; keepalive_timeout 120s; keepalive_requests 10000; }
lua上下文怎么区分不同流量该由谁处理呢?
Upstream的更新流程
Upstream 负载均衡
hash key | 描述 |
$arg_{VAR} | 根据url 传递的参数 VAR 做一致性hash |
$http_{NAME} | 根据HEADER 传递的参数 NAME 做一致性hash |
$cookie_{NAME} | 根据 Cookie 传递的参数 NAME 做一致性hash |
$remote_addr | 根据客户端的IP做一致性hash |
Upstream 主动健康检查
- 更新 Upstream 数据时,生成一份 "raw hc backends" 的副本, 定时器中的健康检查使用此副本中的数据进行。 当健康检查结果需要触发peers 变更时,更新共享内存中的 upstream backends。
- 目前健康检查模块的定时器时间间隔是 5秒。策略中的健康检查间隔需>=5s 。
TLS Termination/SNI
vstest.example.com
与 a.test.com
对应的证书进行关联。 Prometheus 指标采集
KIC 服务中通过注解Annotations 声明Prometheus 指标的采集端口及路径。配置如下:
apiVersion: v1 kind: Service metadata: annotations: prometheus.io/port: "12001" prometheus.io/scheme: http prometheus.io/scrape: "true" prometheus.io/path: "/stats" name: njet-ingress namespace: njet-ingress spec: type: NodePort ports: - port: 80 targetPort: 80 protocol: TCP name: http - port: 443 targetPort: 443 protocol: TCP name: https selector: app: njet-ingress
参考链接
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
字节跳动AB实验经验分享:企业如何构建数据驱动的实验文化?
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,CCF TF 举办了第 123 期分享活动,本期主题为“用户体验工程”。 CCF TF 是中国计算机学会为企业界计算机专业人士创建的企业间常态化合作交流平台,本期分享邀请到了来自火山引擎、牛游谷公司等在用户体验工程领域有着良好实践的专家,共同探讨在数智化时代,面对复杂用户场景和超高体验要求,如何通过有效的体验测量和管理、利用 A/B 测试技术,在新趋势下持续追求卓越并提升产品竞争力。 在活动中,来自火山引擎 AB 测试平台的专家结合字节跳动的 AB 实验经验,进行了《数据驱动的实验文化》为主题的现场分享。AB 测试是用户体验优化过程中必不可少的一环,也被称为效果衡量的“金标准”,字节跳动具有独到的数据驱动的实验文化,在这样的土壤中,AB 测试也成为了字节跳动优化用户体验的利器。 在企业中,能让 AB 实验发挥最大效用的企业实验文化搭建,可以从组织、方法论与工具应用三个维度关注。在企业组织层面,需建立完善 AB 实验的流程机制,字节的 AB 实验与产品的设计研发紧密嵌合,每个小决策都会得到实验验证...
- 下一篇
MySQL 中 DELETE 语句中可以使用别名么?
某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错! 作者:林靖华,开源数据库技术爱好者,擅长MySQL和Redis的运维 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 650 字,预计阅读需要 2 分钟。 背景 某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错(MySQL 数据库版本 5.7.34): mysql> delete from test1 t1 where not exists (select 1 from test2 t2 where t1.id=t2.id); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1 where not exists (select 1 from test2 t2 w...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7