Kubernetes не знает про ваш легаси: Дмитрий Самохвалов о том, как подружить два мира, не сломав ни один из них

Автор: Дмитрий Самохвалов · HighLoad++ Channel

Доклад с HighLoad++ 2024, 49 минут. Kubernetes великолепно работает внутри себя. Проблемы начинаются на границе: когда поды должны обращаться к legacy-сервисам вне кластера, а legacy-системы — к подам. Эта граница существует у большинства компаний, которые переходят на Kubernetes постепенно, а не заново строят всё с нуля.

Самохвалов разбирает конкретные конфигурации и паттерны: как работает сетевая модель Kubernetes (flat network, каждый под получает IP) и почему она не совпадает с тем, чего ждёт legacy-окружение; как CNI-плагины (Calico, Cilium, Flannel) по-разному решают задачу связности; как настроить BGP-пиринг между кластером и существующей сетевой инфраструктурой; почему NodePort и LoadBalancer — это не решение, а костыль, который работает до определённого масштаба. Это доклад не про «установите Kubernetes», а про то, что происходит когда старая и новая инфраструктура должны сосуществовать в одной сети.

Кому смотреть: DevOps- и SRE-инженерам, занимающимся миграцией на Kubernetes в организациях с существующей инфраструктурой — особенно там, где legacy не уйдёт в ближайшие годы.

Из этого можно взять в работу: если у вас поды Kubernetes обращаются к legacy-сервисам через ExternalName Service или захардкоженные IP — это временное решение, которое не масштабируется и не обеспечивает failover. Доклад показывает, как это сделать правильно.

Сетевая модель Kubernetes: в K8s каждый под получает уникальный IP из pod CIDR, поды могут напрямую общаться друг с другом внутри кластера. Это flat network — нет NAT между подами. Проблема: pod CIDR обычно не маршрутизируется за пределами кластера, и legacy-системы не знают, как добраться до pod IP.

CNI-плагины и их различия: Flannel — простой overlay через VXLAN, хорошо работает в изолированных кластерах, плохо интегрируется с внешней сетью. Calico — использует BGP для распространения маршрутов, умеет интегрироваться с корпоративными маршрутизаторами. Cilium — основан на eBPF, более гибкий, но требует более новых версий ядра. Выбор CNI — это выбор сетевой модели, и менять его потом дорого.

BGP-интеграция: когда Calico настроен с BGP, он может анонсировать pod-маршруты на корпоративные маршрутизаторы. Legacy-системы начинают видеть поды как обычные IP в корпоративной сети. Самохвалов показывает конкретную конфигурацию BGP-пиринга и что нужно настроить на стороне сетевого оборудования.

Service Mesh на границе: для двусторонней связности с legacу часть команд использует service mesh (Istio, Linkerd) с ServiceEntry-ресурсами — это позволяет описать внешние сервисы как часть mesh и применять к ним те же политики (mTLS, rate limiting, circuit breaker), что и к внутренним.