Система ревалидации освобождённых публичных IPv4-адресов в облаке на
базе SDN VK Cloud. С переходом на docker-compose
каждый компонент — control-api,
admin-dashboard, prober,
validator-agent — разворачивается отдельным
контейнером по своему профилю (COMPOSE_PROFILES), на
своём хосте. Ниже показано, как они связаны между собой (control
plane) и что именно проверяется в реальном сетевом трафике (data
plane).
1 Control plane: кто кем управляет
Оператор — через веб-панель или напрямую curl'ом — обращается к
единственному источнику истины, control-api. validator-agent
и prober сами инициируют все вызовы (pull-модель):
регистрируются, шлют heartbeat, забирают назначение, отчитываются о
результатах. control-api сам к ним не обращается.
control-api — единственный компонент с состоянием
(SQLite) и единственная точка принятия решений: какой IP кому
назначить и когда считать проверку завершённой. Остальные сервисы
развёрнуты по одному контейнеру на профиль docker-compose — на
управляющей машине, на каждой внешней площадке и на каждой
ВМ-валидаторе; все стрелки к control-api идут от них — это
они опрашивают control-api, а не наоборот. Связь с облаком идёт
через сеть OpenStack — Neutron и его альтернативная реализация в
SDN VK Cloud, Sprut, — поэтому на схеме указаны оба.
2 Data plane: что реально проверяется
Один и тот же публичный адрес проверяется одновременно с двух
независимых сторон. Этот сетевой трафик control-api не видит
напрямую — он получает только заявленный агентами результат по
отдельному управляющему каналу (см. схему control plane выше).
Egress (слева): validator-agent сам
всегда обращается наружу через назначенный Floating IP — сначала
self-check во внешнем IP-echo сервисе (адрес обязан быть вне
облака — иначе SNAT не сработает), затем проверки из конфига до
целей. Inbound (справа): N внешних площадок
независимо стучатся в тот же адрес снаружи. Только сочетание
обоих направлений даёт полную картину — адрес может нормально
работать «наружу», но быть заблокирован для конкретной внешней
сети, и наоборот.
egress-проверка (от validator-agent, через FIP)inbound-проверка (от внешних площадок, в FIP)