Apache APISIX 2.13.0 釋出

Apache_APISIX發表於2022-03-30

距離 Apache APISIX 上一次釋出 LTS 版本已經過去了大半年的時間,今天,Apache APISIX 社群帶來了一個全新的 LTS 版本——2.13.0。該 LTS 版本不僅效能更加穩定,而且支援了更多的可觀測性、服務發現外掛和更完善的多語言開發體系。

如果你在追求整體穩定性的同時,也想嘗試一下新功能,不妨考慮將現有的 Apache APISIX 升級到 2.13.0。後續社群也會在 2.13.0 版本的基礎上釋出一系列 patch 版本。

img

功能更新

新變化:不再預設暴露 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 外掛,方便生成測試資料。

相關文章