Перейти к основному содержимому

Edge-маршрутизатор

Проблема и зачем​

Пока машинам ВЦОД (виртуального центра обработки данных) хватает своей сети, маршрутизатор им не нужен. Как только трафику нужно ходить между сетями и наружу, а отдельные сервисы — публиковаться под другим адресом и портом, появляется точка стыка: маршрутизатор, который знает про несколько сетей и держит правила фильтрации трафика и трансляции адресов.

Эту точку стыка закрывает Edge — программно-определяемый маршрутизатор (Edge). Он живёт внутри кластера, подключается к сетям своими портами и управляется теми же вызовами API, что и остальные объекты vStack Center. Отдельная железная коробка и отдельная консоль администрирования для него не нужны: SDN (software-defined networking) означает, что маршрутизатор — такой же управляемый объект кластера, как ВМ или сеть.

Модель и сущности​

Edge — это виртуальная машина под управлением vStack Center. Метод edge-create собирает синтетический запрос vms-create и передаёт его VM-агенту. Методы edge-start, edge-stop и edge-restart транслируются в vms-start, vms-stop и vms-restart, а edge-remove — в vms-remove. Отсюда следует практическое: маршрутизатор занимает ресурсы кластера как ВМ и подчиняется её ограничениям — например, порт добавляется только на остановленной машине. Идентификатор ВМ (vm_id) в ответах API видит только роль Cluster master.

Сам объект Edge описывают такие поля:

ПолеЧто означает
edge_idUUID маршрутизатора. Ключ во всех методах Edge
ownerВладелец. Возвращается всем ролям
vdc_idВЦОД, которому принадлежит общий (shared) Edge
vm_idИдентификатор ВМ маршрутизатора. Только для роли Cluster master
oper_status, oper_progress, oper_tsСостояние последней операции, её прогресс в процентах и время
deploy_tsОтметка времени применения правил на маршрутизаторе
modifiedВремя последнего изменения записи
base_version, ctrl_version, GI_objectСлужебные поля версионирования и федерации GI

К сетям Edge подключается портами — их не больше четырёх. Порт описывает связку «сеть — слот — адреса»:

Поле портаЧто задаёт
port_idИдентификатор порта. Его принимают edge-ratelimit и edge-remove-nic, а в правилах на порт ссылается rule_ifname
slotНомер слота (не больше 4)
network_idСеть, к которой подключён порт
ifnameЧисловой интерфейс порта
addressIPv4-адрес порта или null, если IPv4 не назначен
address_v6Список IPv6-адресов порта (до 8). Пустой список, если IPv6 не назначены
macMAC-адрес порта
ip_guardФлаг IP guard: 0 — отключить, 1 — включить. По умолчанию 1
ratelimit_mbitsОграничение полосы в Мбит/с. 0 — без ограничения

Правила Edge живут двумя нумерованными наборами: nat — трансляция адресов, fw — фильтрация трафика (firewall). Ключ внутри набора — номер правила; для firewall номер лежит в диапазоне 100–32767. Рядом с наборами возвращается поле incarnation — метка набора, которая уходит на маршрутизатор вместе с правилами.

Как работает​

Конфигурация правил и их исполнение разведены. Методы edge-add-fw-rule, edge-add-nat-rule, edge-remove-fw-rule и edge-remove-nat-rule синхронные и работают только с базой vStack Center: правило появляется в наборе или исчезает из него, но трафик его ещё не видит. Доставку выполняет отдельный вызов edge-deploy-rules — он собирает из базы полный набор (incarnation, nat, fw) и целиком отправляет его агенту Edge.

Из этой развязки вытекают два следствия. Первое: пока набор не применён, набор в базе и набор на маршрутизаторе расходятся, поэтому правка правил заканчивается применением, а не добавлением правила. Второе: применение не «доливает» отдельные изменения, а заменяет набор целиком — набор в базе всегда держит полную картину желаемого состояния.

Асинхронные операции Edge проходят через агентов, и агент зависит от типа операции. Жизненный цикл машины (запуск, остановка, перезапуск, удаление) идёт к VM-агенту, операции с портами (edge-add-nic, edge-remove-nic) — к Storage-агенту, правила и журнал пакетного фильтра — к агенту Edge. Такой вызов сначала возвращает промежуточный ответ {"message": "relayed"} — это подтверждение передачи, а не результат. Финальный ответ приходит колбэком от агента.

Жизненный цикл выглядит так. edge-create создаёт ВМ маршрутизатора, регистрирует Edge в базе и запускает машину — отдельный запуск после создания не нужен. Дальше идёт рабочая фаза: порты добавляются и удаляются, полоса на порту ограничивается, наборы правил правятся и применяются. Остановка и запуск переводят маршрутизатор между состояниями, не меняя конфигурацию. edge-remove удаляет Edge и все его правила из базы, а затем сносит ВМ.

Доступ строится на привилегиях с областью действия. Роль Cluster master работает с любым Edge в кластере. Администратор ВЦОД создаёт маршрутизаторы в своём ВЦОД, видит там каждый из них и читает их наборы правил. Управляет он только теми маршрутизаторами, которые создал сам: порты, полоса, запуск и остановка, правка и применение правил, удаление. На чужой маршрутизатор своего ВЦОД каждая из этих операций отвечает -403, удаление в том числе.

Пользователь и наблюдатель ВЦОД читают список маршрутизаторов своего ВЦОД, их карточки и наборы правил. Владение маршрутизатором для этого не требуется.

Наблюдаемость правил закрывает журнал пакетного фильтра. Метод edge-get-pfloggs забирает журнал с маршрутизатора в виде PCAP-файла — его открывают в анализаторе трафика и смотрят, какие пакеты правила действительно поймали.

Ограничения​

  • Портов на Edge — не больше четырёх, номер слота — не больше 4.
  • Порт добавляется только когда ВМ маршрутизатора остановлена (либо находится в состоянии ошибки или создания). На работающем Edge вызов edge-add-nic отклоняется.
  • Номера правил firewall ограничены диапазоном 100–32767. Для NAT-правил диапазон не задан.
  • Вручную задаётся до 8 IPv6-адресов на порт. Адрес проверяется на формат, принадлежность IPv6-подсети сети (net_cidr_v6), отсутствие в зарезервированных (ippool_reserved_v6) и уже выданных (ippool_port_allocations) адресах и на уникальность внутри запроса.
  • Значения rule_action, rule_proto и rule_direction — числовые идентификаторы из справочников кластера, а не имена действий и протоколов.
  • Применение правил требует запущенного Edge с прогрессом 100% и завершённым bootstrap. Остановленный или ещё запускающийся маршрутизатор правила не примет.
  • Журнал пакетного фильтра хранится 24 часа, а объём выгрузки агент ограничивает 3000 пакетами. Сам метод закрыт признаком возможности feature.edge_log_pcap в параметрах кластера.
  • Всю функциональность Edge закрывает зонтичный признак возможности feature.edge в параметрах кластера. Пока он выключен, любое обращение к маршрутизаторам отвечает кодом -25030 «The edge feature has not been enabled». Под запрет попадает и чтение: список маршрутизаторов, карточка и наборы правил. Каждый такой отказ пишется в журнал безопасности событием feature.gate-denied.

Что читать дальше​