Apache APISIX 3.1.0 版本正式发布
时隔一个月,新版本又来了。这次的 APISIX 3.1.0 是 3.0 大版本以来的第一个新版本,在 3.x 的新时代里,我们一如既往地在每个版本中给大家奉上更多的新功能。
此次发布的 3.1.0 版本,添加了对插件配置的加密存储和存储在外部安全服务的支持,着重于让用户能够更安全、更放心地使用他们的配置。在这之外,我们还引入了许多新的特性,旨在优化对 APISIX 的使用体验。
新特性:插件配置的加密存储
新版本支持将插件的特定字段加密保存到 etcd 中。
在之前的版本中,APISIX 提供了一个 key_encrypt_salt
的配置项,支持对 etcd 里面存储的 SSL key 进行加密,避免明文存储私钥数据。毕竟像私钥这样的敏感数据,少一个地方存储明文,就能多一份安心。那么对于其他同样敏感的配置,比如 jwt-auth
插件中的 secret,我们能不能也加密起来,避免在 etcd 里面存储明文呢?
3.1 版本中就把加密存储的功能拓展到其他字段上。有了这个功能,我们可以在某个特定的插件上指定需要加密的字段,然后在 config.yaml
文件中开启加密,即可避免明文存储。
举个例子,我们给 jwt-auth
插件新增了如下的标记:
encrypt_fields = {"secret", "private_key"},
当我们在 config.yaml
里开启了字段的加密功能:
apisix: data_encryption: enable: true keyring: - edd1c9f0985e76a2
那么写入到 etcd 的 jwt-auth
插件的配置中的 secret 和 private_key,就会被加密存储。通过 etcdctl get --prefix /
看到的配置,会是诸如 “"secret":"77+NmbYqNfN+oL..."” 这样的数据,而不是原始的配置信息。
新特性:将敏感信息存储在外部安全服务
除了可以将敏感信息加密存储在 etcd 之外,还可以选择从别的系统中动态获取敏感信息,而不再要求敏感信息必须存储在 APISIX 的配置存储(如 etcd)中。
在 3.1 版本中,我们上线了名为 APISIX Secret 的功能。APISIX Secret 允许用户在 APISIX 中通过一些密钥管理服务(Vault 等)来存储 secret,在使用的时候根据 key 进行读取,确保 secret 在整个平台中不以明文的形式存在。
APISIX 目前支持通过以下方式存储 secret:
- 环境变量
- HashiCorp Vault
相关示例
以 key-auth
插件为例,我们来简单示范下如何使用该特性。
基于环境变量的敏感信息存储
第一步:APISIX 实例启动前创建环境变量
export JACK_AUTH_KEY=abc
第二步:在 key-auth
插件中引用环境变量
curl http://127.0.0.1:9180/apisix/admin/consumers \\ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "jack", "plugins": { "key-auth": { "key": "$ENV://JACK_AUTH_KEY" } } }'
通过以上步骤,可以将 key-auth
插件中的 key 配置保存在环境变量中,而不是在配置插件时明文显示。
基于 Vault 的敏感信息存储
第一步:在 Vault 中创建对应的配置,可以使用如下命令:
vault kv put apisix/jack auth-key=value
第二步:通过 Admin API 添加 Secret 资源,配置 Vault 的地址等连接信息:
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/1 \\ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "https://127.0.0.1:8200", "prefix": "apisix", "token": "root" }'
第三步:在 key-auth
插件中引用 APISIX Secret 资源,填充配置在 Vault 中的位置:
curl http://127.0.0.1:9180/apisix/admin/consumers \\ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "jack", "plugins": { "key-auth": { "key": "$secret://vault/1/jack/auth-key" } } }'
通过以上步骤,可以将 key-auth
插件中的 key 配置保存在 Vault 中,而不是在配置插件时明文显示。
新特性:实验性基于 gRPC 的 etcd 配置同步
在本次新版本中,我们还引入了实验性的基于 gRPC 的 etcd 配置同步。当前 APISIX 同步 etcd 的配置,是基于 HTTP long pulling,这就要求 etcd 开启 gRPC-gateway (所幸的是默认就是开启的)。
在实践过程中,我们遇到了 etcd 的 HTTP API 出现问题,也许是因为通过 HTTP 同步配置并非 etcd 的主流使用方式,所以会更容易遇到 bug。通过把 etcd 配置同步由 HTTP long pulling 切换到 gRPC 上面来,APISIX 实现了同步方式与主流接轨。
另外由于 gRPC 本身提供了多路复用的支持,改用 gRPC 同步配置能大幅降低 APISIX 到 etcd 的连接数。当前 APISIX 同步每一类配置都要有独立的 HTTP 连接,切换到 gRPC 后每个进程只有一条用于配置同步的连接(如果开启了 L4 代理,那么是两条)。
启用实验性的基于 gRPC 的配置同步,需要在配置文件 config.yaml
中设置 use_grpc: true
,如下所示:
etcd: use_grpc: true timeout: 3600 host: - "http://127.0.0.1:2379" prefix: "/apisix"
新特性:基于 Consul 的服务发现
在 APISIX 之前的版本里,有热心的贡献者提供了基于 Consul KV 的服务发现实现。不过 Consul KV 跟 Consul 自身的服务发现功能有些不同,Consul 自身的服务发现支持额外的一些功能,比如对注册服务的健康检查,所以在使用上会更为广泛些。本次 3.1 版本中,另一位热心贡献者提供了基于 Consul 的服务发现,填补了这一空缺。
基于 Consul 的服务发现和之前版本里基于 Consul KV 的服务发现有着相似的配置。首先,需要在 config.yaml
文件中启用该服务发现:
discovery: consul: servers: - "http://127.0.0.1:8500"
然后在具体的 upstream 中配置对应的 service_name
和 discovery_type
:
curl http://127.0.0.1:9180/apisix/admin/upstreams/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d ' { "service_name": "service_a", "discovery_type": "consul" }'
对应的 upstream 在使用过程中,就会根据 Consul 里面配置的值去得到真正的上游节点。
新特性:内置的调试插件
工欲善其事,必先利其器,调试是程序员日常工作的一部分。作为注重调试体验的网关,APISIX 在 3.1 版本中以插件的形式内置了一个 Lua 调试器插件,支持动态设置断点、添加回调等等。
默认的配置如下:
plugins: ... - inspect ... plugin_attr: inspect: delay: 3 hooks_file: "/usr/local/apisix/plugin_inspect_hooks.lua"
APISIX 在启动后,会定期查看配置的 hooks_file (这里是 "/usr/local/apisix/plugin_inspect_hooks.lua"),如果文件中有内容,就会根据里面的内容设置断点和回调。比如下方内容会给 limit-req.lua 的 88 行上设置一个断点,并在该断点上注册了回调函数 function(info) ... end
。
local dbg = require "apisix.inspect.dbg" dbg.set_hook("limit-req.lua", 88, require("apisix.plugins.limit-req").access, function(info) ngx.log(ngx.INFO, debug.traceback("foo traceback", 3)) return true end)
新功能:优化以及更多小功能
除了上面提到的几个大的功能外,此次发布也包含许多值得述说的改动,比如:
- 优化 Prometheus 指标采集的资源占用
- 支持在 L4 的代理中,配置域名作为上游 如果你对新版本的完整更新细节感兴趣,请参考 3.1.0 发布的 changelog:https://github.com/apache/apisix/blob/release/3.1/docs/zh/latest/CHANGELOG.md#310

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
袋鼠数据库管理工具 2.2 已发布
重点特性介绍 这是袋鼠2023系列第三个稳定版本(Beta),适合所有数据库工具需求者使用。 这个版本增加了SQL执行器和数据库转存器支持,可以直接把数据库导出为同构或异构数据库脚本; 新特性或修复的缺陷列表 增加 SQL 执行对话框 增加 导出并转换对话框 增加查询耗时显示 SQLite: 修复索引字段加载问题 SQLite: 修复备份数据表名字问题 MariaDB: 修复加载架构对象范围问题 MySQL: 修复加载架构对象范围问题 PostgreSQL: 修复 v15 用户属性问题 更新智能提示候选项图标 更新中文语言支持(zh-CN/zh-TW/zh-SG/zh-HK) 更新 Windows 安装程序以默认选择驱动程序 更新 GTK 库: v4.9.2 下载与安装 袋鼠数据库管理工具 2.2 新版本功能快照
- 下一篇
Go 语言通用代码生成器仙童尝鲜版十二,发布最新介绍视频
Go语言通用代码生成器仙童尝鲜版十二,发布最新介绍视频 Go语言通用代码生成器:仙童尝鲜版十二。发布最新介绍视频。介绍了尝鲜版十二的PDF数据导出和java兼容性等先进特性。包含两个示例,包括前端和后端项目的演示。请见视频: https://www.bilibili.com/video/BV14K411i7DM/ Go 语言通用代码生成器:仙童发布尝鲜版十二。新增支持 PDF 格式数据导出。在尝鲜版十一基础上有增强和修错。流畅支持模板向导代码生成。支持三大变形功能群,支持四种数据库。已完成所有功能规划,下一个版本即可进入 Beta 阶段。本版本代码生成器已属稳定版,接近 Beta 版本质量。尝鲜版十二也同时拥有尝鲜版十一的所有先进功能。 Go 语言通用代码生成器仙童尝鲜版十一,发布最新介绍视频。请见: https://www.bilibili.com/video/BV1ce411P7qU/ Go 语言通用代码生成器:仙童尝鲜版十一。在尝鲜版十基础上有增强和修错,并支持数据库表与字段的中文注释和兼容所有 java 通用代码生成器的 SGS2 模板,直接生成 go 语言后端和 Vue 前端...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址