Настройка ресурсов для WAF‑ноды¶
Количество ресурсов, выделенных для WAF‑ноды, определяет качество и скорость обработки запросов. Данная инструкция содержит рекомендации по настройке ресурсов для WAF‑ноды.
Основными потребителями ресурсов являются следующие компоненты WAF‑ноды:
-
Tarantool или модуль постаналитики. Выполняет статистический анализ обработанных запросов локально и является основным потребителем ресурсов.
-
NGINX. Основной компонент WAF‑ноды и обратного проксирования.
Tarantool¶
Модуль постаналитики использует хранилище Tarantool, находящееся в оперативной памяти. База данных Tarantool используется для хранения в локальном буфере копии трафика, который обрабатывает WAF‑нода, в том числе заголовки запросов и ответов, тело запросов. Тело ответа не записывается в базу данных.
Рекомендуемое количество памяти для Tarantool — 75% от оперативной памяти сервера. Чтобы оценить требуемое количество памяти более точно используется следующая формула:
Скорость обработки запросов в байтах в минуту * 15 * 2
Для оценки используется данная формула, так как для эффективной работы WAF‑ноды необходимо хранить данные не менее чем за 15 минут обработки запросов с учетом двойных издержек на сериализацию данных.
Например, если WAF‑нода на пике обрабатывает HTTP/HTTPS запросы со скоростью 50 Мбит/сек, для Tarantool требуется выделить следующее количество памяти:
50 Мбит/сек / 8 (бит в байте) * 60 (секунд в минуте) * 15 * 2 = 11,250 Мбайт (или ~ 11 Гбайт) RAM
Настройка ресурсов в Ingress‑контроллере Kubernetes¶
Настройка памяти Tarantool для pod'а ingress-controller-wallarm-tarantool
описывается в следующем блоке файла values.yaml
:
-
Для передачи значения в Гбит:
controller: wallarm: tarantool: arena: "0.2"
-
Для передачи количества ядер ЦП:
controller: wallarm: tarantool: resources: limits: cpu: 1000m memory: 1640Mi requests: cpu: 1000m memory: 1640Mi
Параметры блока передаются с помощью опции --set
команды helm install
(при установке Ingress‑контроллера) или helm upgrade
(при изменении параметров установленного Ingress‑контроллера). Например:
helm install --set controller.wallarm.tarantool.arena='0.4' <INGRESS_CONTROLLER_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
Для корректной установки Ingress‑контроллера, в опции --set
также необходимо передать другие параметры Helm‑чарта
helm upgrade --reuse-values --set controller.wallarm.tarantool.arena='0.4' <INGRESS_CONTROLLER_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
Настройка ресурсов на других платформах¶
Настройка памяти для Tarantool выполняется в файле /etc/default/wallarm-tarantool
> атрибут SLAB_ALLOC_ARENA
. Чтобы указать количество памяти:
- Откройте конфигурационный файл Tarantool:
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
- Укажите размер памяти в атрибуте
SLAB_ALLOC_ARENA
. Значение может быть целым или дробным (разделитель целой и дробной части — точка). Например:
SLAB_ALLOC_ARENA=10.4
- Перезапустите Tarantool:
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
Чтобы получить количество времени, на протяжении которого Tarantool может хранить данные о трафике с текущим уровнем нагрузки на WAF‑ноду, вы можете использовать метрику wallarm-tarantool/gauge-timeframe_size
.
NGINX¶
Количество ресурсов, которое использует NGINX, зависит от множества факторов. Для средней оценки используется следующая формула:
Количество одновременных запросов * Средний размер запроса * 3
Например:
-
WAF‑нода обрабатывает на пике 10000 запросов одновременно;
-
средний размер запроса — 5 Кбит.
Количество ресурсов, потребляемых NGINX, будет равно:
10000 * 5 Кбит * 3 = 150000 Кбит (или ~150 Мбит)
Чтобы выделить ресурсы:
-
для pod'а Ingress‑контроллера NGINX (
ingress-controller
) настройка описана в следующем блоке в файлеvalues.yaml
:
controller: resources: limits: cpu: 1000m memory: 1640Mi requests: cpu: 1000m memory: 1640Mi
Чтобы изменить настройку, необходимо использовать опцию
--set
командыhelm install
(при установке Ingress‑контроллера) илиhelm upgrade
(при изменении параметров установленного Ingress‑контроллера). Например:helm install --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
Для корректной установки Ingress‑контроллера, в опции
--set
также необходимо передать другие параметры Helm‑чартаhelm upgrade --reuse-values --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
-
для других плаформ используйте конфигурационный файл NGINX.
Рекомендации по использованию ресурсов CPU
При запуске WAF‑ноды в боевой среде рекомендуется выделить как минимум 1 ядро ЦП для NGINX и 1 ядро ЦП для Tarantool.
Фактическое количество ресурсов для NGINX зависит от многих факторов, например: количество запросов в секунду, средний размер запроса и ответа, количество правил ЛОМ, типы кодировки данных и других. В среднем, 1 ядро ЦП обрабатыает около 500 запросов в секунду. При первоначальной настройке ресурсов рекомендуется выделить увеличенное количество ресурсов для WAF‑ноды. Через некоторое время вы сможете проверить реальное количество используемых ресурсов и адаптировать настройку под реальные показатели, увеличенные вдвое для обеспечения стабильности в случаях типа скачка трафика.