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

Деплой Docker‑образа ноды Валарм в GCP

Данная инструкция содержит краткое руководство по деплою Docker‑образа ноды Валарм (NGINX) с помощью облачной платформы Google Cloud Platform. Для деплоя Docker-образа используется компонент Google Compute Engine (GCE).

Ограничение инструкции

В данной инструкции не описана конфигурация для балансировки нагрузки и автоматического масштабирования нод Валарм. Чтобы выполнить конфигурацию самостоятельно, рекомендуем ознакомиться с документацией GCP.

Требования

Способы конфигурации Docker-контейнера с нодой Валарм

При деплое необходимо передать в Docker‑контейнер параметры ноды Валарм одним из способов:

  • Через доступные переменные окружения. С помощью переменных окружения задаются базовые настройки ноды. Большинство доступных директив не могут быть переданы через переменные.

  • В примонтированном конфигурационном файле. С помощью конфигурационного файла можно выполнить полную настройку ноды, используя любые доступные директивы. При этом способе конфигурации параметры для подключения к Облаку Валарм передаются в переменных окружения.

Деплой контейнера с настройкой ноды через переменные окружения

Для деплоя контейнера с настройками ноды, переданными только в переменных окружения, вы можете использовать Консоль GCP или gcloud CLI. В данной инструкции используется gcloud CLI.

  1. Запишите данные от аккаунта Валарм в локальные переменные окружения, чтобы передать чувствительные данные в GCP более безопасным образом:

    export DEPLOY_USER='<DEPLOY_USER>'
    export DEPLOY_PASSWORD='<DEPLOY_PASSWORD>'
    
    • <DEPLOY_USER>: email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
    • <DEPLOY_PASSWORD>: пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
  2. Создайте инстанс с запущенным Docker-контейнером с помощью команды gcloud compute instances create-with-container:

    gcloud compute instances create-with-container <INSTANCE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server \
        --container-env DEPLOY_USER=${DEPLOY_USER} \
        --container-env DEPLOY_PASSWORD=${DEPLOY_PASSWORD} \
        --container-env NGINX_BACKEND=<HOST_TO_PROTECT_WITH_WALLARM>
        --container-image registry-1.docker.io/wallarm/node:3.4.1-1
    
    gcloud compute instances create-with-container <INSTANCE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server \
        --container-env DEPLOY_USER=${DEPLOY_USER} \
        --container-env DEPLOY_PASSWORD=${DEPLOY_PASSWORD} \
        --container-env NGINX_BACKEND=<HOST_TO_PROTECT_WITH_WALLARM> \
        --container-env WALLARM_API_HOST=api.wallarm.ru \
        --container-image registry-1.docker.io/wallarm/node:3.4.1-1
    
    • <INSTANCE_NAME>: название инстанса, например: wallarm-node.
    • --zone: зона, в которой будет запущен инстанс.
    • --tags: теги для инстанса. Через теги настраивается доступность инстанса из других ресурсов. В данном случае передается значение http-server, чтобы порт инстанса 80 принимал входящие запросы.
    • --container-image: ссылка на Docker-образ с нодой Валарм.
    • --container-env: переменные окружения с настройками ноды Валарм из таблицы ниже. Не рекомендуется передавать значения переменных DEPLOY_USER и DEPLOY_PASSWORD в явном виде.

      Переменная окружения Описание Обязательная?
      DEPLOY_USER Email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      DEPLOY_PASSWORD Пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      NGINX_BACKEND Домен или IP‑адрес ресурса, который необходимо защитить с помощью Валарм. Да
      WALLARM_API_HOST Адрес Валарм API:
      • api.wallarm.com для EU‑Облака
      • api.wallarm.ru для RU‑Облака
      По умолчанию: api.wallarm.com.
      Нет
      WALLARM_MODE Режим работы ноды Валарм:
      • block, чтобы блокировать вредоносные запросы
      • safe_blocking, чтобы блокировать только те вредоносные запросы, которые отправлены с IP‑адресов из серого списка
      • monitoring, чтобы анализировать, но не блокировать запросы
      • off, чтобы не обрабатывать входящий трафик
      По умолчанию: monitoring.
      Подробное описание режимов работы
      Нет
      WALLARM_APPLICATION Уникальный идентификатор для обозначения защищенного приложения в Облаке Валарм. Значение может быть любым целым положительным числом, кроме 0.

      По умолчанию (если переменная не указана явно): -1 (приложение default в Консоли управления → Настройки → Приложения).

      Подробнее о настройке приложений →

      Поддержка переменной WALLARM_APPLICATION

      Переменная WALLARM_APPLICATION поддерживается, начиная с Docker‑образа версии 3.4.1-1.

      Нет
      TARANTOOL_MEMORY_GB Размер оперативной памяти для Tarantool в гигабайтах. Значение может быть целым или дробным (разделитель целой и дробной части — точка). По умолчанию: 0.2 гигабайта. Нет
      DEPLOY_FORCE Заменяет существующую ноду Валарм на новую, если название ноды соответствует идентификатору контейнера, который вы запускаете. Принимает значения:
      • true, чтобы заменить ноду
      • false, чтобы отключить замену ноды
      По умолчанию (если переменная не указана явно): false.
      Ноде Валарм присваивается название, соответствующее идентификатору контейнера. Данная опция полезна, если идентификаторы Docker‑контейнеров в вашей среде статичные и вы повторно запускаете Docker‑контейнер с нодой Валарм (например, с новой версией образа). Если в этом случае значение переменной равно false, процесс создания ноды завершится с ошибкой.
      Нет
    • Описание всех параметров команды gcloud compute instances create-with-container приведено в документации GCP.

  3. Перейдите в Консоль GCP → Compute Engine → VM instances и убедитесь, что инстанс появился в списке.

  4. Протестируйте работу ноды Валарм.

Деплой контейнера с настройкой ноды через примонтированный файл

Для деплоя контейнера с настройками ноды Валарм, переданными через переменные окружения и примонтированный конфигурационный файл, необходимо создать инстанс с конфигурационным файлом и запустить Docker-контейнер в этом же инстансе. Для этого вы можете использовать Консоль GCP или gcloud CLI. В данной инструкции используется gcloud CLI.

  1. Создайте инстанс из любого образа операционной системы, доступного в реестре Compute Engine, с помощью команды gcloud compute instances create:

    gcloud compute instances create <INSTANCE_NAME> \
        --image <PUBLIC_IMAGE_NAME> \
        --zone <DEPLOYMENT_ZONE> \
        --tags http-server
    
    • <INSTANCE_NAME>: название инстанса.
    • --image: название образа операционной системы из реестра Compute Engine. Инстанс будет создан из указанного образа, и Docker-контейнер будет запущен в созданном инстансе. Если параметр опущен, инстанс будет создан на основе образа Debian 10.
    • --zone: зона, в которой будет запущен инстанс.
    • --tags: теги для инстанса. Через теги настраивается доступность инстанса из других ресурсов. В данном случае передается значение http-server, чтобы порт инстанса 80 принимал входящие запросы.
    • Описание всех параметров команды gcloud compute instances create приведено в документации GCP.
  2. Перейдите в Консоль GCP → Compute Engine → VM instances и убедитесь, что инстанс появился в списке и находится в статусе RUNNING.

  3. Подключитесь к инстансу по SSH, используя инструкцию GCP.

  4. Установите в инстансе пакеты Docker по инструкции для подходящей ОС.

  5. Запишите данные от аккаунта Валарм в локальные переменные окружения инстанса:

    export DEPLOY_USER='<DEPLOY_USER>'
    export DEPLOY_PASSWORD='<DEPLOY_PASSWORD>'
    
    • <DEPLOY_USER>: email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
    • <DEPLOY_PASSWORD>: пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм.
  6. Создайте в инстансе директорию с конфигурационным файлом default с настройками ноды Валарм (например, директорию configs). Пример файла с минимальными настройками:

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        #listen 443 ssl;
    
        server_name localhost;
    
        #ssl_certificate cert.pem;
        #ssl_certificate_key cert.key;
    
        root /usr/share/nginx/html;
    
        index index.html index.htm;
    
        wallarm_mode monitoring;
        # wallarm_instance 1;
    
        location / {
                proxy_pass http://example.com;
                include proxy_params;
        }
    }
    

    Набор директив, которые могут быть указаны в конфигурационном файле →

  7. Запустите Docker-контейнер с нодой Валарм с примонтированным конфигурационным файлом и переменными окружения.

    docker run -d -e DEPLOY_USER=${DEPLOY_USER} -e DEPLOY_PASSWORD=${DEPLOY_PASSWORD} -v <INSTANCE_PATH_TO_CONFIG>:<CONTAINER_PATH_FOR_MOUNTING> -p 80:80 wallarm/node:3.4.1-1
    
    docker run -d -e DEPLOY_USER=${DEPLOY_USER} -e DEPLOY_PASSWORD=${DEPLOY_PASSWORD} -e WALLARM_API_HOST='api.wallarm.ru' -v <INSTANCE_PATH_TO_CONFIG>:<DIRECTORY_FOR_MOUNTING> -p 80:80 wallarm/node:3.4.1-1
    
    • <INSTANCE_PATH_TO_CONFIG>: путь до конфигурационного файла, созданного на предыдущем шаге. Например: configs.
    • <DIRECTORY_FOR_MOUNTING>: директория контейнера, в которую монтируется конфигурационный файл. Конфигурационный файл может быть примонтирован в директории контейнера, которые использует NGINX:

      • /etc/nginx/conf.d — общие настройки
      • /etc/nginx/sites-enabled — настройки виртуальных хостов
      • /var/www/html — статические файлы

      Директивы ноды описываются в файле контейнера /etc/nginx/sites-enabled/default.

    • -p: порт, через который нода принимает запросы. Значение должно совпадать с портом инстанса.

    • -e: переменные окружения из таблицы ниже. Не рекомендуется передавать значения переменных DEPLOY_USER и DEPLOY_PASSWORD в явном виде.

      Переменная окружения Описание Обязательная?
      DEPLOY_USER Email для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      DEPLOY_PASSWORD Пароль для аккаунта пользователя Деплой или Администратор в Консоли управления Валарм. Да
      WALLARM_API_HOST Адрес Валарм API:
      • api.wallarm.com для EU‑Облака
      • api.wallarm.ru для RU‑Облака
      По умолчанию: api.wallarm.com.
      Нет
      DEPLOY_FORCE Заменяет существующую ноду Валарм на новую, если название ноды соответствует идентификатору контейнера, который вы запускаете. Принимает значения:
      • true, чтобы заменить ноду
      • false, чтобы отключить замену ноды
      По умолчанию (если переменная не указана явно): false.
      Ноде Валарм присваивается название, соответствующее идентификатору контейнера. Данная опция полезна, если идентификаторы Docker‑контейнеров в вашей среде статичные и вы повторно запускаете Docker‑контейнер с нодой Валарм (например, с новой версией образа). Если в этом случае значение переменной равно false, процесс создания ноды завершится с ошибкой.
      Нет
  8. Протестируйте работу ноды Валарм.

Тестирование работы ноды Валарм

  1. Перейдите в Консоль GCP → Compute Engine → VM instances и скопируйте IP-адрес инстанса из столбца External IP.

    Настройка экземпляра контейнера

    Если IP-адрес отсутствует, убедитесь, что инстанс находится в статусе RUNNING.

  2. Отправьте тестовый запрос с атаками SQLI и XSS на скопированный адрес:

    curl http://<COPIED_IP>/?id='or+1=1--a-<script>prompt(1)</script>'
    
  3. Перейдите в Консоль управления Валарм → секция События для EU‑Облака или для RU‑Облака и убедитесь, что атаки появились в списке.

    Атаки в интерфейсе

Чтобы посмотреть сообщения об ошибках запуска контейнера, в меню инстанса необходимо выбрать View logs. Если инстанс недоступен, убедитесь, что в контейнер переданы корректные значения всех обязательных параметров ноды.