Зеркалирование через API
Блок зеркалирования трафика сервиса задаётся только через REST API: отдельной формы в интерфейсе у него нет. Набор операций тот же, что и у остальных настроек конфигурации балансировки.
Запросы отправляйте на адрес сервера бэкенда, токен передавайте в заголовке Authorization:
PUT /api/v1/clusters/{clusterId}/services/{serviceId}
Authorization: Bearer <токен>
Content-Type: application/jsonСправочник методов системы 5А с описанием всех полей открывается по адресу https://<Адрес сервера бэкенда>:8443/api/v1/docs. Методы конфигураций балансировки собраны в нём в группе SLB Cluster Services.
Методы
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/clusters/{clusterId}/services | список конфигураций балансировки кластера |
POST | /api/v1/clusters/{clusterId}/services | создать конфигурацию балансировки |
GET | /api/v1/clusters/{clusterId}/services/{serviceId} | прочитать конфигурацию балансировки с блоком traffic_mirror |
PUT | /api/v1/clusters/{clusterId}/services/{serviceId} | включить или изменить блок traffic_mirror |
DELETE | /api/v1/clusters/{clusterId}/services/{serviceId} | удалить конфигурацию балансировки |
Идентификатор clusterId — имя кластера балансировки, serviceId — UUID из ответа о создании.
Поля блока
Блок хранится в поле traffic_mirror объекта конфигурации балансировки. Поле одинаково в запросах POST и PUT и в ответе GET. Отсутствие поля означает, что зеркалирование не настроено. Смысл полей разобран в статье Зеркалирование трафика сервиса.
enabled— включена ли отправка копий.destinations— массив приёмников, до32элементов:name— название приёмника, до255символов;url— обязательное поле, HTTP(S)-адрес приёмника, от1до2048символов, соответствует шаблону^https?://.+. Допускаются только схема, хост и порт.
scope— фильтр трафика:methods— массив HTTP-методов, например["POST", "PUT"];hosts— массив доменов, например["upload.example.com"];content_types— массив типов содержимого, например["application/json"];include_paths— массив путей, попадающих в выборку;exclude_paths— массив путей, исключаемых из выборки;body_limit_kb— предел тела одной копии в КиБ, от1. Пустое значение означает, что действует локальный предел агента.
Пример
Фрагмент traffic_mirror для тела запроса — включение зеркалирования с отбором по методу, типу содержимого и путям:
{
"traffic_mirror": {
"enabled": true,
"destinations": [
{
"name": "siem-http",
"url": "http://10.0.0.5:8080"
}
],
"scope": {
"methods": ["POST", "PUT"],
"hosts": [],
"content_types": ["multipart/form-data"],
"include_paths": ["/upload", "/api/documents"],
"exclude_paths": [],
"body_limit_kb": 20480
}
}
}Метод PUT принимает конфигурацию балансировки целиком. Чтобы не потерять остальные настройки, загрузите конфигурацию методом GET, внесите изменения в traffic_mirror и отправьте объект обратно.
Ограничения проверки
Ограничения применяются к traffic_mirror независимо от того, создан объект методом POST или изменён методом PUT. Все они проверяются при включённом enabled: true; нарушение любого из них отклоняет сохранение:
| Условие | Сообщение |
|---|---|
type_l4 не TCP либо L7-протокол отличен от HTTP, HTTPS, gRPC | Зеркалирование трафика можно включить только для HTTP/HTTPS/gRPC |
в destinations больше 32 элементов | Количество приёмников зеркалирования не должно превышать 32 |
в scope.methods метод вне списка GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, CONNECT, TRACE | Недопустимый HTTP-метод в фильтре зеркалирования |
destinations[].url с путём (кроме /), строкой запроса, якорем, учётными данными или без хоста | Адрес приёмника должен содержать только http(s)-схему, хост и порт |
Остальные нарушения относятся к схеме метода и возвращают 422: схема адреса, отличная от http и https, длина url и name, значение body_limit_kb вне диапазона.
При enabled: true список destinations может быть пустым: система примет такую конфигурацию, но копии отправлять будет некуда. Заполняйте список при включении.
Ошибки
Тело ошибки содержит три поля:
| Поле | Значение |
|---|---|
code | HTTP-статус ответа |
reason | вид ошибки, по которому клиент принимает решение: invalid, not_found, conflict, internal |
message | описание ошибки |
| Статус | Когда |
|---|---|
400 | значения полей не проходят смысловую проверку: нарушены условия зеркалирования |
404 | кластер или конфигурация балансировки не найдены |
422 | значение поля нарушает ограничение схемы: длина строки, диапазон числа, шаблон адреса |
500 | внутренняя ошибка сервера |
Ошибка 422 означает нарушение ограничения из схемы метода, а 400 — нарушение смыслового условия: например, 422 вернётся для body_limit_kb вне диапазона, а 400 — для enabled: true у конфигурации с L4-протоколом UDP.