Перейти к содержанию

Настройка ресурсов для 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. Чтобы указать количество памяти:

  1. Откройте конфигурационный файл 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
  1. Укажите размер памяти в атрибуте SLAB_ALLOC_ARENA в ГБ. Значение может быть целым или дробным (разделитель целой и дробной части — точка). Например:
SLAB_ALLOC_ARENA=10.4
  1. Перезапустите Tarantool:
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
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‑ноды. Через некоторое время вы сможете проверить реальное количество используемых ресурсов и адаптировать настройку под реальные показатели, увеличенные вдвое для обеспечения стабильности в случаях типа скачка трафика.