Наша команда отвечает за software-часть внешней сетевой связности в Yandex Cloud. Мы строим систему доставки трафика для разных сценариев: IPv4-связность, Cloud Interconnect, egress NAT, сетевой балансировщик нагрузки. У нас микросервисная архитектура с gRPC-транспортом и Yandex Database в качестве хранилища данных. Подробности, как всё это работает, читайте на Хабре. Команда называется так, потому что является своего рода вратами (Gate) в облако (Cloud).
<aside>
❓ После прочтения все вопросы можно задать по email Сергею Еланцеву ([email protected]) и Константину Крамлиху ([email protected]), а лучше обоим сразу.
</aside>
Знакомство с сервисом и командой CloudGate в Yandex.Cloud.
Сервис CloudGate
Yandex.Cloud предоставляет облачную платформу, в которой каждый может создавать и обслуживать свои сервисы. Чтобы сервисы наших клиентов были доступны снаружи Yandex.Cloud, мы обеспечиваем внешнюю сетевую связность.
ККоманда CloudGate занимается разработкой и обслуживанием следующих сервисов
- cgw-ipv4 (cgw - Cloud GateWay, CGW). Обеспечивает внешнюю сетевую связность по IPv4. Если ваша виртуальная машина в Yandex.Cloud имеет публичный IPv4 адрес, то во внешнюю сеть она ходит через cgw-ipv4.
- cgw-ipv6. Обеспечивает связность по IPv6, пока используется только самим Yandex.Cloud.
- egress-nat. Обеспечивает внешнюю сетевую связность по IPv4 для виртуальных машин без собственного IPv4 адреса. Фактически работает как ваш домашний роутер: имеет набор публичных адресов и обеспечивает трансляцию между публичными и приватными адресными пространствами.
- cgw-dc. Обеспечивает прямую связность Yandex Cloud с частными инфраструктурами клиентов cgw-dc. Позволяет строить безопасный транспорт с широким гарантированным каналом.
- load-balancer, он же nlb. Сетевой балансировщик нагрузки (L4), обеспечивает внешнюю и внутреннюю связность вида «один ко многим», повышает отказоустойчивость сервисов наших клиентов.
Сеть можно условно разделить на «железную» и «программную». Последнюю, в свою очередь, — на внутреннюю и внешнюю. Команда CloudGate строит сервисы для внешней сетевой связности, напрямую взаимодействуя с «железной» и «программной» внутренней сетями. Все CloudGate-сервисы включают базовую часть, в которую входят:
- VPP. Opensource проект, реализующий data plane - программный маршрутизатор и балансировщик нагрузки. Обрабатывает миллионы пакетов в секунду. Его требуется динамически настраивать, и за это отвечают два компонента из control plane.
- GoBGP. Opensource BGP сервер с управлением по gRPC. Обменивается маршрутной информацией с компонентами «железной» и «программной» внутренней сетями.
- bgp2vpp. Собственная разработка, которая «склеивает» VPP и GoBGP. Реализует логику по работе с маршрутами и настройке VPP.
- bgp/vpp monitorings. Набор микросервисов, собирающих и экспортирующих метрики вышеуказанных компонентов.
Роли CloudGate различаются между собой настройками этих базовых сервисов, а также используемыми модулями. Наиболее развесистый функционал есть у сервиса load-balancer. Ему не хватает информации о маршрутизации, ему нужны списки пользовательских балансеров и статусы здоровья реалов, входящих в целевые группы. Этим занимаются следующие микросервисы:
- lb-node. Живёт на хостах с VPP, получает список балансировочных правил от lb-ctrl, настраивает bgp2vpp и VPP.
- lb-ctrl. Хранит списки балансеров в базе YDB, шардирует правила по lb-node и доставляет изменения по ним через gRPC Stream'ы. Подписывается на изменения состояние здоровья своих правил в hc-ctrl.