Как разрешить 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;

Затем вы можете использовать блок восходящего потока как обычно.

Другие вопросы по тегам