繼 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 nil
end)
並在自定義紀錄檔格式中使用它:
{
"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 版本,可通過以下路徑下載:
原始碼:
二進位制安裝包: