Apache APISIX 2.12.0 釋出,雲原生的微服務 API 閘道器

2022-01-28 09:00:58

繼 2.11.0 版本釋出之後,Apache APISIX 也在即將到來的新春佳節,為大家帶來 2022 年。

新功能

更多的 Serverless 整合

在上個版本里,Apache APISIX 增加了對 Azure Function 的支援。而這次新版本在功能上又加入了對更多 Serverless 廠商的支援。如今使用者也可以在 Apache APISIX 中結合 AWS Lambda 和 Apache OpenWhisk,在閘道器上進行特定函數的暴露。

更多的鑑權外掛

此次的新版本,還將帶來兩個眾人翹首以盼的新外掛:forward-auth 和 opa

  • forward-auth 外掛跟 Traefik 的同名外掛功能類似,該外掛可以允許把當前請求的資訊傳送給外部服務進行鑑權。

  • opa外掛則整合了著名的 Open Policy Agent,該外掛可以通過 OPA 來完成複雜的鑑權功能。

通過上述兩個外掛,將為 Apache APISIX 的鑑權功能錦上添花,給使用者帶來更多豐富和上手簡單的鑑權操作。

更多的紀錄檔功能

除了上邊提到的鑑權外掛,本次新版本還將帶來三個新的紀錄檔外掛:google-cloud-logging 、splunk-hec-logging 以及 rocketmq-logger

從外掛名稱上也很容易理解,通過上述三個外掛可以把紀錄檔分別傳送到 Google Cloud、Splunk 和 Apache RocketMQ。未來,Apache APISIX 將會對接越來越多的紀錄檔服務商和開源 Broker,讓紀錄檔處理變得更加輕鬆。

  • 支援記錄響應體

同時,此次 2.12.0 版本還在紀錄檔層面支援記錄響應體。與 Apache APISIX 其他功能一樣,該功能也可以通過表示式進行動態開啟。這樣在使用中,就可以實現僅在上游返回特定的 Content-Type 和 Content-Length 時進行紀錄檔記錄,不用再去顧慮全量採集響應體而帶來的問題了。

具體範例可參考下方:

{    "plugins": {        "kafka-logger": {            "broker_list" : {                "127.0.0.1":9092            },            "kafka_topic" : "test2",            "include_resp_body": true,            "include_resp_body_expr": [                [                    "sent_http_content_length",                    "<",                    "4096"                ],                [                    "sent_http_content_type",                    "==",                    "application/json"                ],            ]        }    },    "upstream": {        "nodes": {            "127.0.0.1:1980": 1        },        "type": "roundrobin"    },    "uri": "/hello"}

上述設定會僅在 Content-Length < 4096 且 Content-Type 為 "application/json" 才記錄紀錄檔。

  • 支援註冊自定義變數

另一個跟紀錄檔緊密相關的功能,就是新版本的 Apache APISIX 已支援註冊自定義變數。同時結合 APISIX 的自定義紀錄檔格式,就可以實現完全自定義上報的紀錄檔內容。即無需修改具體的紀錄檔外掛,就能實現紀錄檔生成和上報的解耦合。這裡我們通過一個範例進行簡單演示一下。

比如我們可以在自己的外掛中註冊一個 a6_route_labels 的變數:

local core = require "apisix.core"
core.ctx.register_var("a6_route_labels", function(ctx)    local route = ctx.matched_route and ctx.matched_route.value    if route and route.labels then        return route.labels    end    return nilend)

並在自定義紀錄檔格式中使用它:

{    "log_format": {        "host": "$host",        "labels": "$a6_route_labels",        "client_ip": "$remote_addr"    }}

假設我們的 Route 長這樣:

{    "plugins": {        "http-logger": {            "uri": "http://127.0.0.1:1980/log",            "batch_max_size": 1,            "concat_method": "json"        }    },    "upstream": {        "nodes": {            "127.0.0.1:1982": 1        },        "type": "roundrobin"    },    "labels": {        "k": "v"    },    "uri": "/hello"}

最終就會收到如下所示的紀錄檔:

{"client_ip":"127.0.0.1","host":"localhost","labels":{"k":"v"},"route_id":"1"}

L4 代理支援 TLS over TCP 上游

在 2.12.0 版本中還引入了新的 Upstream Scheme,現在 Apache APISIX 已支援代理到 TLS over TCP 上游了。

具體做法可參考下方,只需在 Upstream 設定中指明 Scheme 為 TLS 即可。

{    "scheme": "tls",    "nodes": {        "127.0.0.1:1995": 1    },    "type": "roundrobin"}

至此 Apache APISIX 的 TCP 代理功能得到了 TLS 全方位的支援。此外,我們還支援在靜態檔案中設定 L4 代理的 Access Log:​​​​​​​

stream:    enable_access_log: false         # enable access log or not, default false    access_log: logs/access_stream.log    access_log_format: "$remote_addr [$time_local] $protocol $status $bytes_sent $bytes_received $session_time"                                            # create your custom log format by visiting http://nginx.org/en/docs/varindex.html    access_log_format_escape: default       # allows setting json or default characters escaping in variables

更新

多語言外掛持續完善

  • WASM 生態功能更加豐富

在之前版本中,Apache APISIX 已開放了對 WASM 生態的支援。而在 2.12.0 版本中,針對 WASM 生態又做了不少的更新細節。

目前 Apache APISIX 已經支援在 header_filter 的階段執行 WASM 程式碼,彌補了現有外部外掛無法修改響應的不足。

此外,我們還支援在 WASM 裡面通過 Apache APISIX 這個宿主進行 HTTP 通訊。藉助這一功能,我們用 WASM 也重新實現了 forward-auth 外掛。該外掛的功能幾乎和 Lua 版本一模一樣,甚至連測試用例也是在 Lua 版本上改了下名字就能通過了。

  • Java Plugin Runner 最新版本釋出

當然,我們也沒有忘記針對現有的外部外掛進行更新,本次 2.12.0 版本中,Apache APISIX 已允許外部外掛獲取請求體。

比如最近釋出的 Java Plugin Runner 第二版就包含了這一功能。新版本的 Java Plugin Runner 還支援在執行時動態獲取 APISIX 變數。

完善

更多細節

除了上述新功能和元件外,Apache APISIX 2.12.0 版本還更新瞭如下功能:

  • gRPC-Web 的支援:繼 gRPC 代理、HTTP 轉 gRPC 之後,我們迎來了 gRPC 家族的第三個成員。現在 Apache APISIX 也支援代理 gRPC Web 協定了。

  •  limit-count 的增強:如今 limit-count 外掛的計數器已經支援在請求間、路由間進行共用,可以說是相當靈活了。

更多關於 Apache APISIX 2.12.0 的更新細節,可以檢視本次釋出對應的 ​​​​​​​

下載

想要獲取最新的 Apache APISIX 2.12.0 版本,可通過以下路徑下載:

原始碼:

二進位制安裝包:

 

展開閱讀全文