Данила Шейко
Точка
Импортозамещение сетевой инфраструктуры звучит как понятная инженерная задача: заменить зарубежные маршрутизаторы и NGFW на отечественные решения. На практике у нас это превратилось в пересборку сетевой модели production Kubernetes-кластеров на 100+ нод и более чем 1000 сервисов. Нам нужен был не просто firewall, а система сетевых доступов, где каждый Kubernetes namespace обладает своим набором прав на NGFW: какие внутренние и внешние ресурсы ему доступны, а какие нет. Такая необходимость обоснована статусом КИИ.
В старой схеме мы авторизовали pod IP через самописное приложение, отправляющее syslog-события на зарубежный NGFW. Но при переходе на российские решения выяснилось, что привычные подходы не складываются: у одного вендора нужно проверять поведение под нагрузкой, у другого нет нужной syslog-авторизации, зато есть captive portal и интеграция с каталогом пользователей. У одного из вендоров было готовое решение под наш случай, но оно нам не подошло, так как у нас множество разных NGFW и мы хотели избежать вендор-лока.
Дальше началось самое интересное. Для авторизации через captive portal мы использовали Active Directory, но обнаружили неочевидное ограничение: IP клиента берется из TCP-сессии. Значит, запрос авторизации должен уходить именно из сетевого namespace пода. Host-агент отправляет не тот IP, sidecar слишком дорогой и опасный для такой инфраструктурной функции, штатные схемы не подходят.
В докладе расскажу, как нам пришлось полностью поменять сетевую модель при переезде в облако, а также как мы перебрали нормальные варианты, почему они не выдержали production-реальность, и как в итоге появился legatus: DaemonSet-агент с доступом к host network, который находит PID процесса пода, заходит в его network namespace и авторизуется на captive portal от имени этого пода.
Это будет честный разбор: где отечественные решения уже зрелые, где еще больно, чем зарубежные NGFW тоже не идеальны, какие архитектурные компромиссы пришлось принять и что мы бы сделали иначе.
Точка