Apache APISIX 3.0.0 预览版现已发布,为你整理了此次预览版上线的一些功能与调整细节。
本次发布的新版本,是 3.0.0 的 Beta 预览版。作为 3.0 正式版的探路先锋,预览版已经包含了 3.0 大版本中带来的多项新功能。如果你想提前感受 APISIX 3.0 版本的功能盛宴,欢迎尝鲜此次预览版,也期待你在使用中向社区反馈相关体验。
正因为 3.0.0-beta 版本新增了很多不向下兼容的改动,本次发版公告会一一列出这些改动,让各位用户在迁移配置时有所准备。
新变化
移动 config_center、etcd 和 Admin API 配置到 deployment 中
在 3.0 版本中,调整了静态配置文件中的配置,所以你需要同步更新下 config.yaml
文件内的配置。
config_center
功能改由deployment
中的config_provider
实现(#7901)etcd
字段整体搬迁到deployment
中(#7860)- 以下 Admin API 配置移动到
deployment
中的admin
字段(#7823):- admin_key
- enable_admin_cors
- allow_admin
- admin_listen
- https_admin
- admin_api_mtls
- admin_api_version
更多详情可参考最新的 [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml)
文件。
移除多个已废弃配置
在 3.0 新版本中,我们把许多之前标记为 deprecated
的配置进行了清理。
在静态配置中,移除了以下若干字段:
- 移除
apisix.ssl
中的enable_http2
和listen_port
(#7717) - 移除
apisix.port_admin
(#7716) - 移除
etcd.health_check_retry
(#7676) - 移除
nginx_config.http.lua_shared_dicts
(#7677) - 移除
nginx_config.http.real_ip_header
(#7696)
在动态配置中,进行了以下调整:
此外还有具体插件级别上的改动:
- authz-keycloak 中移除了
audience
字段(#7683) - mqtt-proxy 中移除了
upstream
字段(#7694) - error-log-logger 中把 TCP 相关配置放到
tcp
字段中(#7700) - syslog 中移除了
max_retry_times
和retry_interval
字段(#7699) - proxy-rewrite 中移除了
scheme
字段(#7695)
调整 Admin API 响应格式
我们在以下两个 PR 中调整了 Admin API 的响应格式:
新的响应格式调整为以下类型。
返回单个配置:
{
"modifiedIndex": 2685183,
"value": {
"id": "1",
...
},
"key": "/apisix/routes/1",
"createdIndex": 2684956
}
返回多个配置:
{
"list": [
{
"modifiedIndex": 2685183,
"value": {
"id": "1",
...
},
"key": "/apisix/routes/1",
"createdIndex": 2684956
},
{
"modifiedIndex": 2685163,
"value": {
"id": "2",
...
},
"key": "/apisix/routes/2",
"createdIndex": 2685163
}
],
"total": 2
}
其他
- Admin API 的端口改为 9180(#7806)
- APISIX 将只支持 OpenResty 1.19.3.2 及以上版本(#7625)
- 调整了 Plugin Config 对象的优先级,同名插件配置的优先级由 Consumer > Plugin Config > Route > Service 修改为 Consumer > Route > Plugin Config > Service(#7614)
新功能
新玩法:直接从 APISIX 发起 gRPC 请求
从 3.0.0-beta 版本开始,APISIX 集成了 grpc-client-nginx-module
,这是一个支持在 NGINX 中发起 gRPC 请求的模块。只需寥寥数十行 Lua 代码,即可完成跟 gRPC 服务的直接交互。
在下方代码中,我们连接了监听 50051 端口的 gRPC 服务,发送一次 { name = "apisix" }
来创建对应的 stream,然后发送三次请求,最后接收到了五次响应。
local core = require "apisix.core"
local gcli = core.grpc
assert(gcli.load("t/grpc_server_example/proto/helloworld.proto"))
local conn = assert(gcli.connect("127.0.0.1:50051"))
local st, err = conn:new_bidirectional_stream("helloworld.Greeter",
"SayHelloBidirectionalStream", { name = "apisix" })
if not st then
ngx.status = 503
ngx.say(err)
return
end
for i = 1, 3 do
local ok, err = st:send({ name = "apisix" })
if not ok then
ngx.status = 503
ngx.say(err)
return
end
end
assert(st:close_send())
for i = 1, 5 do
local res, err = st:recv()
if not res then
ngx.status = 503
ngx.say(err)
return
end
ngx.say(res.message)
end
更多详细细节可参考相关文档。
目前 APISIX 对 grpc-client-nginx-module
的整合只是个开始,后续将会在 APISIX 中进行更多改造工作,比如直接使用 gRPC 来连接 APISIX 的控制面。
新插件:elasticsearch-logger 和 tencent-cloud-cls
APISIX 几乎每个新版本的发布都会引入新的日志插件,此次也不例外,引入了两个新的日志插件。
elasticsearch-logger
插件是写入到 Elasticsearch 的日志插件。通过配置该插件,你可以把日志批量传输到 Elasticsearch。如下述配置,会将日志发送到 9200 端口的 Elasticsearch 上:
"plugins":{
"elasticsearch-logger":{
"endpoint_addr":"http://127.0.0.1:9200",
"field":{
"index":"services"
}
},
...
},
...
tencent-cloud-cls
插件则是对接腾讯云日志服务的插件。
跟 elasticsearch-logger
类似,也需要配置相关服务器的地址,同时还需要配置用户的身份信息:
"plugins": {
"tencent-cloud-cls": {
"cls_host": "ap-guangzhou.cls.tencentyun.com",
"cls_topic": "${your CLS topic name}",
"global_tag": {
"module": "cls-logger",
"server_name": "YourApiGateWay"
},
"include_req_body": true,
"include_resp_body": true,
"secret_id": "${your secret id}",
"secret_key": "${your secret key}"
},
...
},
现有功能拓展
除了上面提到的几个大的新变化外,此次版本发布也包含很多值得一提的特性:
- K8s 服务发现支持配置多个集群;
- log-rotate 时支持限制日志文件的上限大小;
- 新增
openfunction
插件,可以调用 OpenFunction 平台的 FaaS 函数; - 新增
workflow
插件,可以灵活执行更多逻辑。
如果你对此次发版的完整内容感兴趣,请参考 3.0.0-beta 发布的 changelog。