Lua 叢集指定器

概述

HTTP Lua 叢集指定器允許 Lua 腳本在請求流程中選擇路由叢集。

注意

LuaJIT 用作執行階段環境。

這表示目前支援的 Lua 版本主要為 5.1,並帶有一些 5.2 的功能。

有關更多詳細資訊,請參閱 LuaJIT 文件

組態

  • 此篩選器應使用類型 URL type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig 進行組態。

  • v3 API 參考

Lua 叢集的簡單組態範例

 1                  prefix: "/"
 2                route:
 3                  inline_cluster_specifier_plugin:
 4                    extension:
 5                      name: envoy.router.cluster_specifier_plugin.lua
 6                      typed_config:
 7                        "@type": type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig
 8                        source_code:
 9                          inline_string: |
10                            function envoy_on_route(route_handle)
11                              local header_value = route_handle:headers():get("header_key")
12                              if header_value == "fake" then
13                                return "fake_cluster"
14                              end
15                              return "example_cluster"
16                            end
17                        default_cluster: example_cluster
18          http_filters:
19          - name: envoy.filters.http.router

source_code 中定義的 Lua 腳本將被執行,以選擇路由的叢集。

它也可以根據匹配的請求標頭來選擇叢集。

如果 Lua 腳本執行失敗,將使用 default_cluster

完整範例

使用 Docker 的完整範例可在 Lua 叢集指定器沙箱 中找到。

路由處理 API

當 Envoy 在組態中載入腳本時,它會尋找腳本定義的全域函數

function envoy_on_route(route_handle)
end

依照路由路徑,Envoy 將以協程方式執行 envoy_on_route,並將路由 API 的處理傳遞給它。

支援串流處理的下列方法

headers()

local headers = route_handle:headers()

傳回串流的標頭。標頭可用於選擇特定的叢集。

傳回一個 標頭物件

標頭物件 API

get()

headers:get(key)

此方法取得標頭。

key 是一個指定標頭鍵的字串。

如果標頭存在,則傳回包含標頭值的字串,否則傳回 nil

如果多個標頭具有相同的大小寫不敏感鍵,它們的值將會連接成一個字串,並以 , 分隔。