Lua 叢集指定器
概述
HTTP Lua 叢集指定器允許 Lua 腳本在請求流程中選擇路由叢集。
組態
此篩選器應使用類型 URL
type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig
進行組態。
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
。
如果多個標頭具有相同的大小寫不敏感鍵,它們的值將會連接成一個字串,並以 ,
分隔。