Прозрачный баланс нагрузки прокси и udp с Nginx в Docker

Я пытаюсь настроить балансировщик нагрузки с IP-адресом и прозрачным прокси порта. Моя среда работает на докере. Мы используем mesos + marathon для управления контейнерами. Для балансировки нагрузки UDP я использую Nginx. App и Nginx работают в док-контейнерах. У меня есть несколько требований: 1. Один клиент должен всегда подключаться к одному и тому же узлу приложения во время сеанса. 2. Приложение, стоящее за nginx, должно предполагать, что оно взаимодействует с клиентом напрямую.

Я использовал эту статью для моей настройки: https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/

Итак, nginx работает с пользователем root. Контейнеры находятся в одной сети. Я включил несколько модулей для nginx, таких как stream, nginx-sticky-module-ng и т. Д.

Nginx Stream conf: `

upstream app-server {
  sticky;
  server some-app:5684;
  server some-app:5684;
 }

server {     
    listen 5684 udp;
    proxy_pass app-server:5684;
    proxy_bind $remote_addr:$remote_port transparent;
    proxy_responses 1;
    proxy_timeout 1s; 
       }

На каждом вышестоящем сервере я установил gw по умолчанию на Nginx IP.

На nginx я установил следующие правила iptables.

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p udp -s 172.16.0.0/16 --sport 5684 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 0 #I assume this should be 0,because there could be different ports
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

Но клиент не может добраться до сервера, кажется. Похоже, пакеты только что застряли на Nginx. Я пропустил какую-то конфигурацию или что-то не так с правилами iptables?

0 ответов

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