Я пытался несколько дней и все еще не смог заставить прозрачный балансировщик нагрузки TCP работать с HAproxy / NGINX.
Проблема в том, что все работает правильно, пока я не попробую включить прозрачность. И NGINX, и HAproxy выполняют балансировку нагрузки, но предоставляют localhost в качестве IP-адреса пользователя.
Что я пытался это изменить:
Поменял их на запуск от root.
Для NGINX:
Пробовал использовать эту статью: https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/#upstream-reach-external
Настроены iptables, добавлена таблица маршрутизации и т. Д. Часть о том, что «шлюз по умолчанию должен быть IP-адресом сервера NGINX», я не понимаю, потому что NGINX и приложения работают на одном компьютере без каких-либо контейнеров.
Для HAproxy:
Итак, общий вопрос: у меня есть балансировка нагрузки HAproxy / NGINX на x.x.x.x: 30000. На том же компьютере у меня есть приложения в x.x.x.x: 30001 и x.x.x.x: 30002.
Как я могу сбалансировать нагрузку в этой конфигурации? Какие дополнительные правила маршрутизации требуются? Нужно ли мне создавать виртуальную подсеть для перенаправления? Потому что на данный момент кажется, что балансировщик нагрузки может подключиться к приложению, но не может вернуть ответ пользователю.
Я не уверен, что вы можете сделать это на одном хосте.
TPROXY сложен даже в лучшие времена. Я когда-либо видел, как он хорошо работает с двумя отдельными подсетями И отдельными хостами (виртуальными или физическими).
Вы уверены, что не можете использовать что-то попроще, например DSR Режим?
Я знаю, что LVS DSR работает на том же хосте.
Или как насчет ПРОТОКОЛ HAPROXY PROXY (если ваше приложение поддерживает это).
Теоретически я предполагаю, что TPROXY должен быть возможен на одном хосте, поэтому, возможно, кто-нибудь умный ответит :-).