间隔 Apache APISIX 上一次公布 LTS 版本曾经过来了大半年的工夫,明天,Apache APISIX 社区带来了一个全新的 LTS 版本——2.13.0。该 LTS 版本不仅性能更加稳固,而且反对了更多的可观测性、服务发现插件和更欠缺的多语言开发体系。
如果你在谋求整体稳定性的同时,也想尝试一下新性能,无妨思考将现有的 Apache APISIX 降级到 2.13.0。后续社区也会在 2.13.0 版本的根底上公布一系列 patch 版本。
性能更新
新变动:不再默认裸露 API
在 2.13.0 之前的版本中,咱们容许插件注册可供客户端调用的 API。例如,jwt-auth
插件会注册一个 JWT 签名的接口,客户端能够拜访该接口,以生成用于校验的签名。但这个设计有一个潜在的缺点——因为裸露进去的是接口而不是路由,因而无奈像看待路由一样为其增强平安防护。尽管现有的机制容许用户通过编写对应的 plugin interceptor 来拦挡接口拜访,但这种形式依然存在安全隐患。
所以从 2.13.0 版本开始,咱们决定做出重大变更,不再默认裸露 API。 如果用户须要裸露接口,则须要通过 public-api
插件将接口绑定到对应的路由上。这种形式会带来两个益处:
- 注册的 API 会有更高的能见度,目前注册的 API 只有通过显示配置才会失效,拜访形式也是由用户自定义。
- 容许采纳更多的平安防护选项,注册的 API 和路由领有同样的权限管制。
当然,2.13.0 版本还有其余的新变动,比方修复了历史版本的不合理行为。如需理解具体优化信息,请查阅 2.13.0 Changelog。
新性能:可观测性层面对接更多的监控体系
作为 API 网关,Apache APISIX 始终致力于连贯更多的服务,买通更多的可观测性上下游。咱们在每个版本都会为此添砖加瓦,2.13.0 版本也不例外。
这次咱们新增了一个 tracing 插件:**opentelemetry**
,容许发送 OpenTelemetry tracing 数据到配置的 collector。上面简略通过一个示例来看一下。
在动态配置外面设置了 collector:
plugin_attr:
opentelemetry:
resource:
service.name: APISIX
tenant.id: business_id
collector:
address: "127.0.0.1:4317"
batch_span_processor:
drop_on_queue_full: false
max_queue_size: 6
batch_timeout: 2
inactive_timeout: 1
max_export_batch_size: 2
之后就能够在特定的路由上开启 tracing:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"methods": ["GET"],"uris": ["/uid/*"],"plugins": {"opentelemetry": {"sampler": {"name":"always_on"}
}
},
"upstream": {
"type": "roundrobin",
"nodes": {"127.0.0.1:8089": 1}
}
}'
命中该路由的申请将会上报 OpenTelemetry 的数据到对应的 collector。
此外,咱们还新增了两个日志插件,反对把日志上报到 ClickHouse 和 Loggly 中。
ClickHouse 是地表最快的 OLAP 数据库之一。Apache APISIX 反对发送 access log 和 error log 到 ClickHouse,示例如下:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"plugins": {"clickhouse-logger": {"user":"default","password":"a","database":"default","logtable":"test","endpoint_addr":"http://127.0.0.1:8123"}
},
"upstream": {
"type": "roundrobin",
"nodes": {"127.0.0.1:1980": 1}
},
"uri": "/hello"
}'curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/error-log-logger -H'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'-X PUT -d'
{
"clickhouse": {
"user": "default",
"password": "a",
"database": "error_log",
"logtable": "t",
"endpoint_addr": "http://127.0.0.1:8123"
}
}'
Loggly 是 SolarWinds 旗下的日志解决 SaaS 平台,咱们反对通过 syslog 或 HTTP/HTTPS 的形式发送 access log。示例如下:
配置上报形式
curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/loggly -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"protocol":"http"}'
配置须要上报的路由
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"plugins":{"loggly":{"customer_token":"xxx",}
},
"upstream":{
"type":"roundrobin",
"nodes":{"127.0.0.1:80":1}
},
"uri":"/index.html"
}'
更欠缺的多语言开发体系
Apache APISIX 自 2.11 版本起开始反对 Wasm(Proxy Wasm SDK),但 LTS 版本始终没有提供相应反对。在此次公布的 Apache APISIX 2.13.0 版本中,咱们新增并欠缺了该性能。
在通过半年超过 10000 行代码(包含测试和文档)的开发后,APISIX 现已全面反对在 解决申请头、申请体、响应头、响应体四个阶段运行 Wasm 代码。2.13.0 版本是第一个反对 Wasm 的 LTS 版本,能够说是一个新的里程碑。
除了 Wasm 之外,咱们也正在开发传统的、基于 RPC 的多语言插件体系。不久之前,咱们公布了 Python Runner 0.2.0 版本。几天后,咱们也会公布 Go Runner 0.3.0 版本。
Bug 修复
- SkyWalking 和 OpenTelemetry 没有追踪认证失败。
log-rotate
切割日志不反对按整点实现。deepcopy
没有复制metatable
。request-validate
对 JSON 外面反复键的解决。prometheus
反复计算指标。- 当
conf.headers
缺失时,proxy-rewrite
中的conf.method
不失效。 traffic-split
首条规定失败时无奈匹配。- etcd 超时触发
resync_delay
。 proto
定义抵触。limit-count
配置不变,重置计数器。- Admin API 的
plugin-metadata
和global-rule
计数有误。 - 合并 route 和 service 时 labels 失落。
更多细节
除了上述性能和组件外,Apache APISIX 2.13.0 版本还更新了如下性能:
- grpc-transcode 反对通过
.pb
文件解决带 import 的 proto 定义。 - 反对从 K8s 配置中获取上游节点。
- 新增
csrf
插件,提供跨站申请伪造防护。 - 新增
mocking
插件,不便生成测试数据。