Установка фильтрующей ноды с помощью инсталлятора¶
В инструкции описана установка фильтрующей ноды «ПроAPI Защита» с помощью инсталлятора.
Инсталлятор устанавливает на сервер ноды однохостовый кластер Kubernetes (дистрибутив k0s) и в нём фильтрующую ноду: nginx с модулем «ПроAPI Защита», агент и хранилище событий. Docker не требуется.
Консоль управления устанавливается до фильтрующих нод, по инструкции Установка Консоли управления с помощью инсталлятора.
Обратите внимание
Инсталлятор устанавливает фильтрующую ноду только из образов «ПроAPI Защита». Подключение модуля к уже работающему nginx выполняется вручную из пакетов, по разделу «Фильтрующая нода» документации «ПроAPI Защита».
Требования¶
Сервер фильтрующей ноды¶
| Параметр | Требование |
|---|---|
| Архитектура | x86-64 (amd64) |
| Операционная система | Linux с systemd |
| Ресурсы | Не меньше 2 vCPU, 4 ГБ оперативной памяти и 20 ГБ диска. При высокой нагрузке ресурсы увеличиваются |
| Состояние | Без установленных Kubernetes и k0s. Порты 80 и 443 свободны |
| Настройки ОС | cgroup v2, стандартное ядро дистрибутива. Swap рекомендуется отключить. Инсталлятор проверяет настройки до изменений на сервере; порядок исправления описан в разделе Настройки операционной системы руководства по установке Консоли управления |
| Доступ | Пользователь с правом sudo |
| Время | Синхронизировано по NTP |
Сетевое взаимодействие¶
| Источник | Назначение | Протокол и порт | Назначение соединения |
|---|---|---|---|
| Клиенты защищаемых приложений | Сервер ноды | TCP 80, 443 или порты из настроек приложений | Защищаемый трафик |
| Сервер ноды | Защищаемые приложения | Порты приложений | Передача проверенного трафика |
| Сервер ноды | Адрес Консоли управления | TCP 443 или порт из ingress.httpsPort | Регистрация ноды, получение настроек, передача событий и статистики |
Доступ в интернет серверу ноды не нужен: все компоненты устанавливаются из бандла ноды.
Порты 3302, 3313, 8099, 9001 и 9099 на адресе 127.0.0.1, а также порты 6443, 9443, 10248–10250, 10256 и 20244 используются самой нодой и кластером. Они не открываются наружу и не используются в настройках приложений.
Учётные данные и файлы¶
- Токен регистрации ноды из Консоли управления (Создание ноды в Консоли управления).
- Адрес Консоли управления, например
https://proapi.example.ru. - Для самоподписанного сертификата Консоли управления – файл
installer.ca.pemиз каталога установки Консоли управления. Для сертификата внутреннего центра сертификации – файл его корневого сертификата. Для сертификата публичного центра сертификации файл не нужен. - Файлы
apifw-installer-linux-amd64,proapi-node-3.0.0.bundle.tar.gzиSHA256SUMSиз дистрибутива «ПроAPI Защита» 3.0.0 (Дистрибутив). После установки Консоли управления они находятся на рабочем месте администратора в каталоге~/proapi.
Создание ноды в Консоли управления¶
-
Войдите в Консоль управления под учётной записью с ролью Администратор.
-
Откройте раздел Ноды и нажмите Создать ноду.
-
Укажите имя ноды и сохраните. Консоль управления выдаст токен регистрации.
Обратите внимание
Токен отображается один раз. Сохраните его сразу.
Инсталлятор берёт токен из переменной окружения APIFW_NODE_TOKEN, а если она не задана, запрашивает его в терминале без отображения ввода. Токен не записывается в файлы и не передаётся в командной строке.
Установка¶
-
Скопируйте файлы на сервер ноды. На рабочем месте администратора выполните:
cd ~/proapi ssh admin@10.0.0.21 mkdir -p proapi-node # ЗАМЕНИТЕ пользователя и адрес сервера ноды scp apifw-installer-linux-amd64 proapi-node-3.0.0.bundle.tar.gz SHA256SUMS installer.ca.pem admin@10.0.0.21:proapi-node/ # ЗАМЕНИТЕФайл
installer.ca.pemнужен только для самоподписанного сертификата Консоли управления. Для сертификата внутреннего центра сертификации скопируйте вместо него файл корневого сертификата этого центра, для сертификата публичного центра сертификации файл не нужен. Если подключения по SSH с рабочего места к серверу ноды нет, перенесите файлы в каталог~/proapi-nodeна сервере ноды другим способом, например на съёмном носителе. -
На сервере ноды проверьте файлы и подготовьте инсталлятор:
cd ~/proapi-node sha256sum -c --ignore-missing SHA256SUMS # для каждого файла должно выводиться OK cp apifw-installer-linux-amd64 installer chmod +x installerЕсли для файла выводится
FAILED, скопируйте этот файл заново. Все дальнейшие команды выполняются на сервере ноды из каталога~/proapi-nodeчерезsudo: инсталлятору нужны права root. -
Установите фильтрующую ноду:
sudo ./installer node install --bundle ./proapi-node-3.0.0.bundle.tar.gz \ --manager https://proapi.example.ru \ --manager-ca installer.ca.pem \ --upstream http://10.0.0.5:8080 # ЗАМЕНИТЕ адреса
| Параметр | Значение |
|---|---|
--bundle | Бандл фильтрующей ноды из дистрибутива. Файлы .tar.gz не распаковываются: инсталлятор сам проверяет и распаковывает бандл |
--manager | Адрес Консоли управления в том виде, в котором его открывают в браузере. Порт указывается, если он отличается от 443, например https://proapi.example.ru:8443. Для Консоли управления без TLS – http://… |
--manager-ca | Файл сертификата центра сертификации Консоли управления. Не указывается для сертификата публичного центра сертификации |
--upstream | Необязательно. Адрес защищаемого приложения для первого виртуального сервера nginx на порту 80. Без параметра сервер отвечает кодом 404 до настройки приложений |
Инсталлятор запрашивает без отображения ввода токен регистрации, проверяет бандл и свободные порты, устанавливает кластер, создаёт файлы настроек nginx, запускает фильтрующую ноду и ожидает её регистрации в Консоли управления. При успешной установке выводится строка Node installed.
Один бандл ноды используется для установки любого числа фильтрующих нод: для каждой ноды повторите шаги 1–3 со своим токеном регистрации.
Обратите внимание
sudo не передаёт инсталлятору переменные окружения. Чтобы передать значения из переменных (например, в скрипте), они перечисляются явно: sudo --preserve-env=APIFW_NODE_TOKEN ./installer node install ….
Фильтрующая нода на сервере Консоли управления¶
Для пилотного проекта и демонстрации фильтрующую ноду допускается установить на сервер Консоли управления профиля standalone. Для промышленной эксплуатации фильтрующие ноды устанавливаются на отдельные серверы.
-
Освободите для фильтрующей ноды порты 80 и 443. Консоль управления переносится на порт 8443 (порт 8080 перенаправляет на 8443). В мастере настройки ответьте «Да» на вопрос «Фильтрующая нода на этом же сервере?» или укажите в
installer.yaml:ingress: host: proapi.example.ru # ЗАМЕНИТЕ httpPort: 8080 httpsPort: 8443Если Консоль управления уже установлена, после изменения выполните обновление на текущую версию. Консоль управления открывается по адресу
https://proapi.example.ru:8443. -
Создайте ноду в Консоли управления (Создание ноды в Консоли управления).
-
На сервере Консоли управления в каталоге с инсталлятором и бандлом ноды выполните:
sudo ./installer node install --bundle ./proapi-node-3.0.0.bundle.tar.gz --upstream http://10.0.0.5:8080 # ЗАМЕНИТЕ адрес приложенияЕсли рабочим местом администратора служит другой компьютер, сначала скопируйте файлы на сервер Консоли управления и подготовьте инсталлятор, как в шагах 1 и 2 раздела Установка. Параметры
--managerи--manager-caне требуются: фильтрующая нода подключается к Консоли управления внутри кластера.
Ограничения:
- поддерживается только профиль
standalone; - к требованиям к серверу Консоли управления добавляются 2 vCPU и 2 ГБ оперативной памяти;
- удаление Консоли управления удаляет и фильтрующую ноду;
- сертификат Let's Encrypt с проверкой по HTTP недоступен, так как порт 80 занят фильтрующей нодой;
- для перехода к промышленной эксплуатации фильтрующая нода удаляется с сервера Консоли управления и устанавливается на отдельный сервер с тем же токеном.
Настройка приложений¶
Настройки nginx находятся на сервере фильтрующей ноды:
| Путь | Содержимое |
|---|---|
/opt/wmx/api-firewall/etc/nginx/nginx.conf | Основной файл. Строки load_module, параметры wmx_api_* и сервер статуса на 127.0.0.1:8099 не изменяются |
/opt/wmx/api-firewall/etc/nginx/conf.d/*.conf | Виртуальные серверы, по одному файлу на приложение |
/opt/wmx/api-firewall/etc/nginx/conf.d/https.conf.example | Пример виртуального сервера с HTTPS |
/opt/wmx/api-firewall/etc/nginx/tls/ | Сертификаты приложений и сертификат центра сертификации Консоли управления (manager-ca.pem) |
Инсталлятор создаёт эти файлы при первой установке и в дальнейшем не перезаписывает. Файлы принадлежат пользователю root и редактируются через sudo, например sudo nano /opt/wmx/api-firewall/etc/nginx/conf.d/default.conf. Изменения применяются командой:
sudo ./installer node reload
Команда проверяет настройки nginx. При ошибке выводится её описание, настройки не применяются, и фильтрующая нода продолжает работать с прежними настройками. При успешной проверке настройки применяются без разрыва соединений, а агент перезапускается и перечитывает сертификат центра сертификации Консоли управления.
Для приложения с HTTPS скопируйте conf.d/https.conf.example в conf.d/<имя приложения>.conf, разместите сертификат и ключ приложения в каталоге tls/ и выполните node reload.
Обратите внимание
DNS-имена в proxy_pass разрешаются при запуске nginx. Если имя не разрешается с сервера ноды, nginx не запускается. Рекомендуется указывать IP-адреса приложений.
Проверка¶
sudo ./installer node status
Пример вывода:
Node: own k0s; module 3.0.0, agent 3.0.0, apistore 3.0.0
Manager: https://proapi.example.ru:443, CA /opt/wmx/api-firewall/etc/nginx/tls/manager-ca.pem
Registration: OK
Status: READY
В Консоли управления в разделе Ноды у ноды отображается статус Активна.
Проверка доступности Консоли управления с сервера ноды:
curl -sI --cacert installer.ca.pem https://proapi.example.ru/ # ЗАМЕНИТЕ имя; --cacert только для самоподписанного сертификата
Ожидается ответ с кодом 200.
Обновление¶
Команда node upgrade применяет к фильтрующей ноде версию из бандла ноды и новые параметры подключения к Консоли управления. На сервере ноды выполните:
cd ~/proapi-node
sudo ./installer node upgrade --bundle ./proapi-node-3.0.0.bundle.tar.gz
Переход на новую версию «ПроAPI Защита» выполняется по руководству новой версии, с инсталлятором и бандлом ноды из её дистрибутива.
- Новые образы загружаются, а новая версия nginx проверяет текущие настройки до остановки фильтрующей ноды. При ошибке фильтрующая нода продолжает работать на прежней версии.
- Обработка трафика прерывается на несколько секунд на время перезапуска nginx. Для обновления без перерыва используйте несколько фильтрующих нод за балансировщиком и обновляйте их по одной.
- Если новая версия не запускается, инсталлятор возвращает прежнюю.
- Если в новой версии модуля изменилось имя файла модуля, инсталлятор заменяет его в строке
load_moduleфайлаnginx.confи выводит сообщениеNOTE: … now loads …. Остальные настройки не изменяются. Если обновление не выполнено, прежний файл восстанавливается. - Если у Консоли управления изменились адрес, порт или вариант TLS, добавьте параметр
--managerс новым адресом и при необходимости--manager-ca.
Смена сертификата Консоли управления¶
Если новый сертификат Консоли управления выпущен другим центром сертификации:
-
На каждой фильтрующей ноде добавьте сертификат нового центра в конец файла
/opt/wmx/api-firewall/etc/nginx/tls/manager-ca.pem, не удаляя прежний. -
Выполните на каждой ноде
sudo ./installer node reload. -
Смените сертификат Консоли управления.
-
После перехода удалите прежний сертификат из файла и снова выполните
node reload.
Устранение неполадок¶
| Сообщение или признак | Причина | Решение |
|---|---|---|
… are required; sudo does not pass environment variables | Команда выполнена через sudo без терминала, а токен задан переменной окружения | Выполните команду в терминале (инсталлятор запросит токен) или передайте переменную параметром sudo --preserve-env=APIFW_NODE_TOKEN |
node commands need root: run them with sudo | Команда выполнена без sudo | Повторите команду через sudo: sudo ./installer node … |
the server uses cgroup v1, and Kubernetes needs cgroup v2 | ОС использует cgroup v1 | Включите cgroup v2 (Настройки операционной системы) |
kernel modules ... are not loaded или ... are missing from the server's kernel | Нужные модули ядра недоступны | Настройки операционной системы |
WARNING: swap is on, WARNING: ... sets net.ipv4.ip_forward = 0, WARNING: ... container-selinux ... | Настройки ОС, которые рекомендуется исправить | Настройки операционной системы. Установка продолжается |
ports already in use on this server: … | Порты заняты другой программой, например веб-сервером | Остановите программу (ss -ltnp показывает процесс) или используйте другой сервер |
k0s on this server is not a ПроAPI Защита installation | На сервере установлен сторонний кластер k0s | Используйте сервер без Kubernetes и k0s |
port 80 on this server belongs to Manager, and the node needs 80 and 443 | Фильтрующая нода устанавливается на сервер Консоли управления, которая использует порты 80 и 443 | Перенесите Консоль управления на другие порты (Фильтрующая нода на сервере Консоли управления) |
this server runs Manager as an HA cluster | Сервер входит в отказоустойчивую Консоль управления | Установите фильтрующую ноду на отдельный сервер |
APIFW_NODE_TOKEN is not a node token | Токен скопирован не полностью | Скопируйте токен заново или создайте новую ноду |
the agent cannot register in Manager | Неверный токен или адрес, DNS-имя Консоли управления не разрешается, порт закрыт, нет сертификата центра сертификации | Выполните проверку из раздела Проверка, проверьте токен и параметр --manager-ca |
x509: certificate signed by unknown authority | Фильтрующая нода не доверяет сертификату Консоли управления | Выполните sudo ./installer node upgrade --bundle ./proapi-node-3.0.0.bundle.tar.gz --manager <адрес> --manager-ca installer.ca.pem |
a previous node install stopped | Предыдущая установка прервана | Выполните sudo ./installer node uninstall, затем установку заново |
... is mounted after k0s reset; unmount it and run node uninstall again | Внутри каталогов k0s остался смонтированный том | Отмонтируйте указанный путь командой umount и повторите удаление |
config error, nothing applied | Ошибка в настройках nginx | Исправьте указанную строку и повторите node reload |
nginx config listens on port …, which is … | В настройках приложения указан служебный порт | Укажите другой порт |
nginx could not apply the config and keeps the previous one | Порт из настроек приложения занят другой программой на сервере ноды | Укажите другой порт или остановите программу (ss -ltnp) и повторите node reload |
the new nginx rejects … | Новая версия не принимает текущие настройки nginx | Исправьте настройки по выводу команды; фильтрующая нода работает на прежней версии |
upgrade failed, the previous version runs again | Новая версия не запустилась | Обратитесь в техническую поддержку, приложив вывод команды |
this is a Manager bundle; node commands need a node bundle | Указан бандл Консоли управления | Укажите бандл ноды proapi-node-3.0.0.bundle.tar.gz |
Ошибка чтения бандла, например invalid или checksum mismatch | Файл бандла повреждён при скачивании или переносе | Проверьте файлы командой sha256sum -c --ignore-missing SHA256SUMS и скопируйте повреждённый файл заново |
this node was installed offline; upgrade it with --bundle | Команда node upgrade выполнена без параметра --bundle | Добавьте параметр --bundle ./proapi-node-3.0.0.bundle.tar.gz |
Удаление¶
sudo ./installer node uninstall
Инсталлятор запрашивает подтверждение: введите REMOVE. На сервере ноды удаляются фильтрующая нода и кластер k0s, после чего сервер требуется перезагрузить. После перезагрузки на сервер можно установить Консоль управления или новую фильтрующую ноду. На сервере Консоли управления удаляется только фильтрующая нода. Настройки nginx в каталоге /opt/wmx/api-firewall/etc сохраняются и используются при повторной установке.
Термины¶
| Термин | Определение |
|---|---|
| Фильтрующая нода | Компонент «ПроAPI Защита», который проверяет трафик защищаемых приложений |
| Консоль управления | Компонент «ПроAPI Защита» для управления фильтрующими нодами, политиками и мониторинга |
| Токен регистрации | Строка, которую Консоль управления выдаёт при создании ноды; связывает фильтрующую ноду с записью в Консоли управления |
| Бандл ноды | Файл дистрибутива со всеми программами и образами контейнеров для установки фильтрующей ноды без доступа в интернет |
| k0s | Дистрибутив Kubernetes, в котором работают компоненты фильтрующей ноды |