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_id | UUID маршрутизатора. Ключ во всех методах 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 | Числовой интерфейс порта |
address | IPv4-адрес порта или null, если IPv4 не назначен |
address_v6 | Список IPv6-адресов порта (до 8). Пустой список, если IPv6 не назначены |
mac | MAC-адрес порта |
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.