Мы пытаемся настроить плагин, который зависит от заголовков запроса, проксируя его на конкретный хост. Бывший.
curl -H 'Env: foo' http://127.0.0.1:8000/poc -> https://foo.example.com/poc
curl -H 'Env: bar' http://127.0.0.1:8000/poc -> https://bar.example.com/poc
В ранних версиях (‹v0.11.0) работал следующий код (это наш файл access.lua плагина):
local singletons = require "kong.singletons"
local responses = require "kong.tools.responses"
local _M = {}
function _M.execute(conf)
local environment = ngx.req.get_headers()['Env']
if environment then
local result, err = singletons.dao.environments:find_all {environment = environment}
if err then
return responses.send_HTTP_INTERNAL_SERVER_ERROR(err)
else
ngx.ctx.upstream_url = result[1].proxy_redirect
end
end
end
return _M
Это сработало из-за того, что ngx.ctx.upstream_url перезаписал поведение proxy_pass.
Поскольку мы хотим использовать его в среде k8s, нам пришлось использовать версию 0.11.0, потому что они исправили некоторые проблемы, касающиеся DNS. Проблема, похоже, в том, что они изменили ngx.ctx.upstream_url на ngx.var.upstream_uri, но поведение не то же самое, он не меняет хост на прокси наш запрос. Это ошибка, которую мы получаем:
2017/08/23 11:28:51 [error] 22#0: *13 invalid port in upstream "kong_upstreamhttps://foo.example.com", client: 192.168.64.1, server: kong, request: "GET /poc HTTP/1.1", host: "localhost:8000"
У кого-нибудь есть такая же проблема? Есть ли другое решение нашей проблемы?
Заранее большое спасибо.