Как разрешить IP-адреса AWS ELB в Openresty для каждого апстрима
Проблема, с которой мы столкнулись, заключается в том, что openresty nginx разрешает только IP-адреса AWS ELB при запуске, а затем кеширует IP-адрес вечно (до тех пор, пока не перезагрузится). Поскольку IP-адрес балансировщика нагрузки AWS может измениться в любое время, я ищу решение, которое сможет разрешать IP-адреса ELB при каждом использовании в восходящем направлении. Ищете что-то похожее на апстрим-опцию "разрешения" в nginx+, но в Openresty. Или какой-то другой способ аннулировать вышестоящий кеш DNS
2 ответа
Есть модуль балансировки, который вы можете использовать изнутри balancer_by_lua_block
директивы. Вы сможете установить любой восходящий IP-адрес.
Этот контекст выполнения кода Lua не поддерживает выдачу, поэтому API-интерфейсы Lua, которые могут давать (например, косокеты и "легкие потоки"), отключены в этом контексте. Обычно можно обойти это ограничение, выполнив такие операции в более раннем фазовом обработчике (например, access_by_lua*) и передав результат в этот контекст через таблицу ngx.ctx.
Вы можете использовать lua-resty-dns и разрешать ваш ELB IP для каждого запроса (это выполняется?!) в access_by_lua_*
сохранить полученные IP-адреса в ngx.ctx и использовать их в balancer_by_lua_block
,
Как насчет использования DNS-сервера в качестве вашего resolver
и переменная для значения proxy_pass
?
Посмотрите на пример ниже из этого поста "Nginx с динамическими потоками" Джеппе Фила-Пирсона
resolver 172.16.0.23;
set $upstream_endpoint http://service-1234567890.us-east-1.elb.amazonaws.com;
location /foo/ {
rewrite ^/foo/(.*) /$1 break;
proxy_pass $upstream_endpoint;
}
Добавьте это в директиву сервера
resolver local=on valid=5s;
Затем вы можете использовать блок восходящего потока как обычно.