Рейтинг:0

Маршрутизация на основе среды NGINX

флаг vn

У меня есть одно приложение, работающее в нескольких кластерах K8s; Допустим, есть frontend-сервис и два backend-сервиса.

Я использую прокси-сервер NGINX для запросов от внешнего интерфейса к внутренним службам. Обычная версия NGINX, нет НГИНКС+. Вот nginx.conf:

сервер {
    ....
    set $back1 "<имя хоста k8s для службы backend1>";
    set $back2 "<имя хоста k8s для службы backend2>";

    местоположение / назад1 {
        переписать ^/back1/(.*)$ /$1 break;
        прокси_пароль http://$back1;
    }
    
    <и то же самое для серверной службы 2>
}

Итак, в основном, что происходит, так это то, что в моем внешнем приложении я устанавливаю адрес внутренней службы в локальный/назад1 и локальный/назад2, запросы попадают в NGINX, который удаляет те назад1 и назад2 префиксы и вызвать любую конечную точку, которую я укажу после в реальных внутренних службах в K8s.

Поскольку у меня есть несколько кластеров K8s, имена хостов серверных служб различаются, и мне нужно учитывать это в моей конфигурации NGINX.

Вопрос в том: Есть ли способ для NGINX различать мои кластеры K8s? Возможно, я могу передать переменную среды контейнеру, на котором запущена моя служба внешнего интерфейса, и создать если заявление в nginx.conf. Что-то вроде:

сервер {
    если (${env} = "кластер1") {
        установить $back1 = "<имя хоста кластера 1>"
    }
    если (${env} = "кластер2") {
        установить $back1 = "<имя хоста кластера 2>"
    }
}

Или, если я могу выполнить команду оболочки в конфигурации nginx, чтобы получить имя хоста и написать аналогичные блоки if.

Буду признателен за любую помощь в этом вопросе!

Рейтинг:0
флаг vn

Я пошел другим путем — с помощью шаблонов, переменных среды и утилиты envsubst, которая поставляется в последних образах докеров nginx.

В шаблоне:

установить $upstream_back1 "${BACK1}";
установить $upstream_back2 "${BACK2}";

В докерфайле

ЗАПУСК envsubst <вашшаблон> /etc/nginx/nginx.conf

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.