Обзор #
nftlb полагается на сетевой стек netfilter / nftables linux. С этим новым стеком предоставляются новые концепции и возможности, которые нам необходимы, чтобы соответствовать текущему дизайну распределения нагрузки.
Цель этой статьи - дать общее представление о том, как спроектированы путь данных балансировки нагрузки и путь управления nftables.
Путь к данным #
Это ловушки Netfilter, которые использует nftlb, используя преимущества настраиваемых цепочек. Необходимо включить новые концепции, такие как разгрузка отслеживания соединений, чтобы ускорить установление перенаправленных соединений с бэкэндами.
------------ | DNSBL | ------------ | вход в очередь | prerouting вперед postrouting ------------ ------------- -------------- -------- ---- ------- -------------- ------- | фильтр | фильтр | фильтр | | фильтр | нац | | фильтр | | нац | | 0 | 50-99 | 100 | | -150 | 0 | | 0 | | 100 | --> | | | Политики безопасности |-( Conntrack )-> | Ограничения в секундах | |-(Маршрутизация)-> | | --> | | | Кластеризация | Таблицы расхода | ДСР | ПРОТИВ {} | Помощники | дНАТ | ПРОТИВ {} | Разгрузка потока | | сНАТ | | | | нестабильный дНАТ | | знаки | | -------------- ------- ------------ ------------- ---- ---------- ------------ -------
вход #
(0) фильтр: Зарезервировано для управления кластерами. Еще не включен в nftlb.
(50-99) фильтр: Зарезервировано для ускорения таблиц потоков. Еще не включен в nftlb.
(100) фильтр: Зарезервировано для: политик безопасности (черные и белые списки), прямого возврата сервера и топологии dNAT без сохранения состояния.
PREROUTING #
(-150) фильтр: Зарезервировано для Пределов безопасности для виртуальных сервисов или для каждого бэкенда, например: максимальное количество установленных соединений, ограничение TCP RST в секунду, ограничение TCP SYN в секунду, отбрасывание нестрогих TCP-соединений, очередь в службу DNSBL, виртуальная служба и метки бэкэнда , использование помощников, регистрация входных подключений по виртуальной службе.
(0) nat: Зарезервировано для назначения NAT искажения.
вперед #
(0) фильтр: Зарезервировано для разгрузки потока. Еще не включен в nftlb.
POSTROUTING #
(100) nat: Зарезервировано для назначения NAT искажения.
Путь управления #
Путь управления nftlb выполнен в виде демона, который предоставляет простой http-сервер с API, или автономного двоичного файла, который принимает файл конфигурации в формате JSON.
------------- перевод ------------- -------- JSON API | | объекты в nft | | сетевая ссылка | | ------------> | http-сервер | --------------> | libnftables | --------> | ядро | | | | | | | | ------------- | ------------- -------- | сетевая ссылка | ---------------------------------------