我们很高兴地宣布 Apache APISIX 3.9.0 版本已经发布,带来了一系列新功能、修复、以及相关用户体验优化。
这个新版本添加了许多新功能,包括客户端和 APISIX 之间对 HTTP/3 的支持、向 Control API 添加插件重新加载端点、Prometheus 指标过期的配置等。
此外,该版本还包含了一些重要的变更。如果您发现这些变更会对您的使用产生影响,请进行相应的计划升级。
重大变更
开启 HTTP/2
在早期版本中,可以通过在配置文件中将 apisix.node_listen.enable_http2
和 apisix.ssl.listen.enable_http2
设置为 true
来启用 HTTP/2。 这些选项在此版本中已被弃用。 从 3.9.0 开始,应当使用 apisix.enable_http2
启用 HTTP/2:
apisix:
enable_http2: true
详情请参考 PR #11032。
整合 keyring
和 key_encrypt_salt
配置项
在早期版本中,key_encrypt_salt
和 keyring
是两个分开的配置选项,都以类似的方式用于数据加密和解密。 此版本删除了key_encrypt_salt
,只需配置 keyring
:
apisix:
data_encryption:
keyring:
- qeddd145sfvddff3
详情请参考 PR #10771。
新功能
支持客户端和 APISIX 之间的 HTTP/3
支持客户端和 APISIX 之间的 HTTP/3 作为实验性功能。尚不支持具有上游服务的 HTTP/3。
HTTP/3 需要 TLS v1.3。要在 APISIX 中的给定端口上启用 HTTP/3,请更新配置文件,如下所示:
apisix:
ssl:
listen:
- port: 9443
enable_http3: true
接下来,在客户端和 APISIX 之间配置 TLS 证书:
curl "http://127.0.0.1:9180/apisix/admin/ssls" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "tls-client-ssl",
"sni": "example.com",
"cert": "'"${server_cert}"'",
"key": "'"${server_key}"'"
}'
详情请参考 PR #10989,PR #11010,和 PR #11027。
将插件重新加载端点添加到 Control API
插件重新加载端点以前存在于 Admin API 中,用于热重新加载所有插件,现在已添加到 Control API,这样可以从控制平面调用插件重新加载:
curl "http://127.0.0.1:9090/v1/plugins/reload" -X PUT
为了兼容,Admin API 中的插件重新加载端点被保留。
详情请参考 PR #10905。
支持在 openid-connect
插件中设置 session cookie 生命周期
您现在可以在 openid-connect
插件中配置 session cookie 生命周期,如下所示:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "auth-with-oidc",
"uri":"/anything/*",
"plugins": {
"openid-connect": {
"client_id": "'"$OIDC_CLIENT_ID"'",
"client_secret": "'"$OIDC_CLIENT_SECRET"'",
"discovery": "'"$OIDC_DISCOVERY"'",
"session": {
"secret": "6S8IO+Pydgb33LIor8T9ClER0T/sglFAjClFeAF3RsY=",
"cookie" : {
"lifetime": 86400
}
},
"redirect_uri": "http://localhost:9080/anything/callback"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"httpbin.org:80":1
}
}
}'
这是为了解决 access token 的生命周期长于 session cookie 生命周期的问题。
详情请参考 PR #10919。
支持设置 Prometheus 指标的过期时间
现在,您可以在 Prometheus 指标变为非活动状态后设置过期时间(以秒为单位),以减少资源消耗:
plugin_attr:
prometheus:
expire: 0 # time in seconds. 0 means the metrics will not expire.
详情请参考 PR #10869。
在 limit-req
和 limit-conn
插件中支持 redis
和 redis-cluster
在 limit-req
和 limit-conn
插件中支持 redis
和 redis-cluster
策略,以便速率限制计数器可以在 APISIX 实例之间共享。
支持 OCSP Stapling
新增 ocsp-stapling
插件,以支持 OCSP stapling。
支持 HTTP 与 Dubbo 的转换
新增 http-dubbo
插件,以支持 HTTP 与 Dubbo 之间的转换。
详情请参考 PR #10703。
其他更新
- 在 Kubernetes 服务发现中支持 EndpointSlice (PR #10916)
- 在
grpc-web
插件中支持cors_allow_headers
属性,以允许跨域资源访问(PR #10904) - 允许在
forward-auth
插件中自定义错误响应代码(PR #10898) - 支持在日志插件中包含请求和响应主体(PR #10888)
- 支持日志插件中的压缩响应(PR #10884)
- 在
mocking
插件中response_headers
支持内置变量(PR #10872) - 修复了不必要的 YAML 配置重新加载(PR #9065)
- 修复
jwt-auth
插件中 payload 被恶意篡改的可能性(PR #10982)
变更日志
有关此版本中更改的完整列表,请参阅 变更日志。