关于网关:Apache-APISIX-215-版本发布为插件增加更多灵活性

48次阅读

共计 2642 个字符,预计需要花费 7 分钟才能阅读完成。

不出意外的话,2.15 将会是 Apache APISIX 3.0 版本公布之前最初一个 minor 版本。从两年前公布第一个 2.0 版本开始,APISIX 曾经公布了 15 个 minor 版本和许多个 patch 版本。作为 2.x 系列最初的一个 minor 版本,2.15 版本能够说是个承前启后的版本。
「承上」是因为该版本持续引入了更多的性能,使得插件配置更加灵便;「启下」则是因为该版本将会是 2.x 版本的最初一个 LTS 版本,后续 APISIX 就要向 3.0 版本进发了。更多细节一起来看下文吧!

自定义插件优先级

新版本反对用户自定义插件的优先级,而非间接利用插件默认的优先级属性。
有了这个性能,咱们能够在某个特定的路由上调整某几个插件的执行程序,从而突破之前插件优先级属性的解放。
例如,在默认状况下,serverless-post-function 插件是在 serverless-pre-function 插件之后执行的。然而通过此性能,能够让 serverless-post-function 插件优先执行。配置示例如下:

 {
    "serverless-post-function": {
        "_meta": {"priority": 10000},
        "phase": "rewrite",
        "functions" : ["return function(conf, ctx)
                    ngx.say(\"serverless-post-function\");
                    end"]
    },
    "serverless-pre-function": {
        "_meta": {"priority": -2000},
        "phase": "rewrite",
        "functions": ["return function(conf, ctx)
                    ngx.say(\"serverless-pre-function\");
                    end"]
    }
}

如果一个插件配置中没有注明优先级,则会依据插件代码中的优先级属性值进行排序。
如果你在 Service 或者 Plugin Config 的插件配置中指定了插件的优先级,那么在合并到路由后仍然失效。

自定义插件是否执行

除了可能调整执行程序外,还能够动静决定插件是否须要执行。2.15 版本中引入了插件配置级别的过滤器,由过滤器的执行后果管制插件执行与否。
下方配置中,只有变量 $status 大于或等于 400 时,才会执行 http-logger 插件。这么一来,只有 4xx 和 5xx 的申请才会被报告到远端的 HTTP 日志服务器上。

{
    "http-logger": {
        "_meta": {
            "filter": {{"status", "!", "<", "400"}
            }
        },
        ...
    }
}

同时,借助 APISIX 的另一个性能 自定义变量,则能够玩出更多花色。比方客户端地址为内网地址,则跳过某个 Logger 之类的场景。

自定义谬误响应

该性能也是在具体插件层面配置的新性能,属于插件配置级别上的错误信息。
如果需求方对特定路由上的谬误响应有所要求,那么这一性能就能派上用场了。无论是什么插件,通过该配置都能设置一个固定的响应后果,防止因为插件内置的谬误响应信息而带来困扰。

如下述配置所示,不论 jwt-auth 插件返回了什么错误信息,都会被改写成 “Missing credential in request” 返回给客户端。

{
    "jwt-auth": {
        "_meta": {
            "error_response": {"message": "Missing credential in request"}
        }
    }
}

容许采集 Stream Route 上的指标

本版本中还进行了一个较大的改变,就是容许在 Stream Route 上采集 metrics 的指标,并通过 Prometheus 的接口裸露进去。
该性能默认为敞开状态,如果须要启用,请在 APISIX-Base 版本上构建 APISIX,并在 config.yaml 中启用 prometheus 插件,示例如下:

stream_plugins:
  - ...
  - prometheus

在启用该插件后,即便只用 APISIX 来代理四层上的 TCP 流量,也会专门监听 9091 的端口,响应 Prometheus 发来的 HTTP 申请。

跟 HTTP 代理子系统局部的 prometheus 插件一样,下一步则是在须要采集指标的 Stream Route 上配置该插件:

curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"plugins": {"prometheus":{}
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {"127.0.0.1:80": 1}
    }
}'

在对该 Stream Route 发动连贯之后,拜访 http://127.0.0.1:9091/apisix/… 就会看到如下 TCP 代理统计数据:

...
# HELP apisix_node_info Info of APISIX node
# TYPE apisix_node_info gauge
apisix_node_info{hostname="desktop-2022q8f-wsl"} 1
# HELP apisix_stream_connection_total Total number of connections handled per stream route in APISIX
# TYPE apisix_stream_connection_total counter
apisix_stream_connection_total{route="1"} 1

目前该性能只实现了统计连接数,后续还会按需退出更多的统计指标。

除了一般的 Stream Route 外,该版本中还给 xRPC 下的 Redis 代理性能提供了统计指标。如依照路由和 Command 细分的命令计数指标 apisix_redis_commands_total 和延迟时间指标 apisix_redis_commands_latency_seconds_bucket

更多功能

在新增性能层面,除了上述提到的几个性能外,此版本也蕴含很多细节改变:

  • 反对 Upstream 对象从 SSL 对象中援用证书
  • prometheus 指标中提供 ngx.shared.dict 统计信息
  • openid-connect 插件反对 PKCE 拓展
    ……

更多具体发版细节,请参考 2.15 Changelog:https://github.com/apache/api…

正文完
 0