写点什么

Apache APISIX 2.13.0 发布

  • 2022 年 3 月 29 日
  • 本文字数:2649 字

    阅读完需:约 9 分钟

距离 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 插件将接口绑定到对应的路由上。这种方式会带来两个好处:


  1. 注册的 API 会有更高的能见度,目前注册的 API 只有通过显示配置才会生效,访问方式也是由用户自定义。

  2. 允许采用更多的安全防护选项,注册的 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-metadataglobal-rule 计数有误。

  • 合并 route 和 service 时 labels 丢失。

更多细节

除了上述功能和组件外,Apache APISIX 2.13.0 版本还更新了如下功能:


  • grpc-transcode 支持通过 .pb 文件处理带 import 的 proto 定义。

  • 支持从 K8s 配置中获取上游节点。

  • 新增 csrf 插件,提供跨站请求伪造防护。

  • 新增 mocking 插件,方便生成测试数据。

用户头像

Github:https://github.com/apache/apisix 2021.06.02 加入

Apache APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。它是基于 OpenResty 和 etcd 来实现,和传统 API 网关相比,Apache APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。

评论

发布
暂无评论
Apache APISIX 2.13.0 发布_开源_Apache APISIX 中国社区_InfoQ写作平台