Виртуальный сервер Linux: путь возврата NAT

Я пытаюсь настроить балансировщик нагрузки LVS перед моим Kubernetes: Calico используется в качестве контейнерной сети, поэтому каждый модуль имеет свой собственный сетевой интерфейс на своем хосте. Внешние IP-адреса, маршруты и правила маршрутизации управляются с помощью keepalived. Каждая подсеть, назначенная моим хостинг-провайдером, имеет свой собственный маршрутизатор. Серверы имеют два физических интерфейса, подключенных к Интернету. Внешние IP-адреса доступны на втором интерфейсе.

Конфигурация такова: первый интерфейс имеет глобальный IP-адрес и маршрут по умолчанию. Второй интерфейс имеет частный IP. Он также имеет все дополнительные IP-адреса от моего хостинг-провайдера. Поскольку все пакеты с дополнительных IP-адресов должны маршрутизироваться через специальный шлюз по умолчанию, я добавил таблицы и правила маршрутизации.

До этого момента все работает как положено. Чтобы сделать сервисы Kubernetes доступными по IP-адресам, я добавил LVS на некоторых узлах.

Моя проблема заключается в следующем: пакеты из Интернета приходят на мои стручки Kubernetes, но их ответы не возвращаются в Интернет. Пакеты исчезают где-то в моем узле Kubernetes. Пакеты ответов от моих модулей используют IP-адрес модуля в качестве источника и должны быть перезаписаны NAT.

При просмотре правил iptables я не вижу правил для LVS. Где они? Когда выполняются правила LVS NAT? Они связаны с интерфейсом? Определяется ли путь переадресации и интерфейс до того, как NAT для ответных пакетов будет готов?

1 ответ

Мне не хватало включения поддержки conntrack netfilter для соединений LVS. См. http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html для описания взаимодействия с сетевым фильтром LVS.

Это можно сделать с помощью:

sysctl net.ipv4.vs.conntrack=1

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