#kubernetes #lua #istio #envoyproxy
#kubernetes #lua #istio #envoyproxy
Вопрос:
У меня есть фильтр Envoy, в котором я добавляю заголовок к каждому HTTP-запросу. Значение заголовка берется из API.
Давайте предположим две конфигурации фильтра. В приведенной ниже конфигурации я добавил жестко запрограммированную версию моего заголовка. Это было проверено в журналах моего целевого приложения, и оно работает.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: lua-filter
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: ANY
listener:
portNumber: 7123
filterChain:
filter:
name: "envoy.http_connection_manager"
subFilter:
name: "envoy.router"
patch:
operation: INSERT_BEFORE
value:
name: envoy.lua
typed_config:
"@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
inlineCode: |
function envoy_on_request(request_handle)
request_handle:headers():add("authorization", "it works!")
end
На этот раз я хочу, чтобы значение заголовка поступало из моего API. К сожалению, эта настройка не работает, и я понятия не имею, почему. Я проверил скрипт Lua на своем локальном компьютере, и сам скрипт работает, но как только я предоставляю скрипт фильтру, заголовок не добавляется.
typed_config:
"@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
inlineCode: |
function envoy_on_request(request_handle)
local http = require('socket.http')
local json = require('json')
local ltn12 = require "ltn12"
local reqbody="my request body"
local respbody = {}
local body, code, headers, status = http.request {
method = "POST",
url = "http://my-address",
source = ltn12.source.string(reqbody),
headers =
{
["Accept"] = "*/*",
["Accept-Encoding"] = "gzip, deflate",
["Accept-Language"] = "en-us",
["Content-Type"] = "application/x-www-form-urlencoded",
["content-length"] = string.len(reqbody)
},
sink = ltn12.sink.table(respbody)
}
respbody = table.concat(respbody)
parsed = json.decode(respbody)
token = parsed["token-value"]
request_handle:headers():add("authorization",token)
end
Комментарии:
1. Каков результат envoy с
-l debug
флагом? Есть ошибки?2. В документах говорится: Не выполнять операции блокировки из сценариев .
http.request
блокируется. Возможно, вам лучше использовать внешнюю авторизацию в сети3. Или используйте
request_handle:httpCall
из envoy lua Api.