Компонент для половины рынка — на двух добровольцах
В ноябре 2025 года SIG Network и Kubernetes Security Response Committee объявили о закрытии ingress-nginx. Поддержка закончилась в марте 2026-го: после этого нет новых релизов, исправлений ошибок и security-патчей. Существующие инсталляции продолжают работать — и именно поэтому риск легко не заметить. В январском заявлении Steering Committee ссылался на внутреннее исследование Datadog: ingress-nginx использовался примерно в половине cloud-native окружений.
Масштаб сам по себе впечатляет меньше, чем причина. Проект годами поддерживали один-два человека в свободное время после работы. Его гибкость — особенно возможность вставлять произвольные фрагменты NGINX через snippet-аннотации — постепенно превратилась из достоинства в технический долг, который сами авторы объявления назвали непреодолимым. В 2021 году уже было известно, что snippets способны открыть доступ к секретам кластера. В марте 2025-го цепочка IngressNightmare довела тот же класс риска до неаутентифицированного RCE.
Поэтому вопрос «кто усложнил Kubernetes?» не имеет одного обвиняемого. Апстрим создавал API с ошибочными границами. Вендоры и пользователи расширяли их под production. Организации хотели централизованный compliance, multi-tenancy, mesh, собственные control plane и всё новые workload. А платформенные команды обещали, что ещё один слой скроет предыдущие. В результате сложность не исчезала — меняла владельца.
Два бюджета сложности: задача и наши решения
Kubernetes управляет распределённой системой, в которой процессы падают, сеть разделяется, конфигурация меняется асинхронно, а желаемое состояние должно сходиться с фактическим. Эта сложность существенна: она существовала и в Borg, и в самописных scheduler, и в shell-скриптах. Удаление Kubernetes не отменяет service discovery, rollout, isolation, capacity planning или recovery. Оно лишь меняет место, где эти задачи решаются.
Но есть и случайная сложность. PodSecurityPolicy прожила несколько лет, была объявлена deprecated в 1.21 и удалена в 1.25. NetworkPolicy сознательно не получила deny-правил и кластерных дефолтов, поэтому для централизованного контроля понадобился отдельный AdminNetworkPolicy API. Policy-движки росли вне ядра, а затем Kubernetes вернул часть их функций в apiserver через ValidatingAdmissionPolicy на CEL. Это не «требования бизнеса». Это последовательность архитектурных решений, некоторые из которых пришлось пересматривать.
| Период | Сдвиг | Что изменилось |
|---|---|---|
| 2014–2015 | Kubernetes открыт и достигает 1.0 | Общий API для оркестрации становится ставкой индустрии |
| 2016–2019 | Operators и CRD | Платформа превращается в конструктор других платформ |
| 2021–2024 | PSP уходит, CEL приходит | Ядро исправляет собственные API и возвращает часть policy-логики |
| 2025–2026 | Ingress NGINX закрыт, Gateway API 1.6 | Скрытая сложность аннотаций заменяется явной моделью ролей и политик |
Тим Хокин, один из создателей Kubernetes, сформулировал это как конечный complexity budget: каждая фича тратит не только строки кода, но и способность проекта объяснять, тестировать и когда-нибудь менять своё поведение. Для расширяемой системы проблема особенно остра. CRD — её сильнейший механизм и одновременно способ превратить кластер в сборку из десятков независимых продуктов с разными циклами обновления.
Почему тогда Kubernetes называют boring?
CNCF Annual Survey 2025 сообщает, что 82% пользователей контейнеров запускают Kubernetes в production, а complexity называют препятствием 34% респондентов. Выше оказались культурные изменения, обучение и безопасность. Это сильный контраргумент катастрофическому нарративу: API стабилизировались, managed-сервисы стали обычными, операционные паттерны известны, а технология перестала быть экспериментом.
Но опрос adoption и стоимость эксплуатации отвечают на разные вопросы. «Нам не страшно внедрять Kubernetes» не означает «нам дёшево и просто его сопровождать». Когда сложность становится работой отдельной platform function, продуктовая команда действительно перестаёт видеть большую её часть. Система стала скучнее для пользователя — и толще для владельца.
Ingress → Gateway API: сложность стала явной
Оригинальный Ingress API был намеренно маленьким: host, path, backend и TLS. В нём не было общего языка для таймаутов, ретраев, canary, внешней авторизации, переписывания заголовков или WAF. Контроллеры закрыли разрыв аннотациями. К июлю 2026 года документация ingress-nginx содержала около 130 уникальных ключей, а snippets позволяли вставлять сырой NGINX config. Локальная простота API породила глобальный, непереносимый DSL.
Gateway API отвечает не сокращением YAML, а явной моделью. GatewayClass принадлежит инфраструктурному провайдеру, Gateway — оператору кластера, Route — приложению. ReferenceGrant ограничивает межнеймспейсные ссылки, status сообщает, что реально принято контроллером, а политики получают формальное место вместо случайной строки в metadata. На дату статьи актуальна ветка 1.6.x; TCPRoute и UDPRoute достигли GA.
Цена тоже стала явной. Один маршрут теперь связан с несколькими ресурсами, а policy attachment должен решать наследование, конфликты, discoverability и fanout статусов. Авторы GEP-713 сами признают, что механизм сложнее желаемого. Но это другой класс сложности: её можно валидировать, наблюдать и распределять между ролями. Аннотация выглядела проще только до первого расследования.
eBPF не отменяет этот вывод
eBPF дал Cilium сильный dataplane и решил задачи гиперскейла, но не является универсальным ответом на сетевую сложность. nftables-режим kube-proxy достиг GA в Kubernetes 1.33 и устранил линейный поиск по iptables-цепочкам без замены всего CNI. Istio ambient убрал sidecar из каждого pod через Rust-компонент ztunnel, а не через обязательный eBPF. Громкие ускорения из миллионов контейнеров нельзя автоматически переносить на кластер из пятидесяти нод. Новый dataplane полезен, если решает измеренную проблему, а не потому, что предыдущий слой выглядит старым.
Много кластеров — не то же самое, что много границ отказа
Разделение на кластеры полезно: разные blast radius, версии, регионы, tenants и требования к обновлениям. Но само число control plane ничего не гарантирует. В марте 2023 года Datadog потерял сеть более чем на 60% инстансов в пяти регионах и трёх облаках. Security-патч systemd приехал через общий механизм автообновлений и удалил маршруты Cilium. Флот был распределён географически и провайдерски, но оставался коррелирован через образ ОС и policy обновления.
Та же ловушка встречается в hub-and-spoke GitOps, едином registry, глобальном identity provider, общем admission webhook и одном шаблоне Cluster API. Сотня кластеров, обновляемых одной политикой за час, — это один failure domain с сотней control plane. Настоящая независимость требует разнести не только runtime, но и пути доставки изменений, доверие, артефакты и полномочия.
У количества кластеров есть и прямая цена. В EKS обычная поддержка control plane тарифицируется по $0,10 в час, extended support старой версии — по $0,60. На флоте из пятидесяти кластеров отложенные upgrade превращаются из неудобства в отдельную бюджетную строку. Multi-cluster имеет смысл как осознанная модель изоляции, а не как рефлекс «поднимем ещё один».
IDP поглотила сложность — и стала отдельной системой
Platform engineering появилась не потому, что разработчики захотели ещё один портал. Kubernetes стандартизировал runtime, но оставил продуктовой команде слишком много решений: chart, policy, сеть, observability, секреты, rollout, ownership. Internal developer platform собрала эти решения в golden path и предложила self-service вместо тикетов. Team Topologies дала для этого правильную цель — снижать когнитивную нагрузку — и полезное ограничение: Thinnest Viable Platform может быть не порталом, а курированным набором договорённостей.
Backstage показал продуктовую форму: каталог, templates, документация, plugins. В больших организациях она естественна. У Авито платформа обслуживает тысячи сервисов и прячет Kubernetes за app.tomlи CLI. У Ozon единообразие важнее локальной идеальности. Т-Банк строит собственную платформу с конца 2020 года командой примерно из пятидесяти инженеров. Эти кейсы доказывают не то, что IDP нужна всем, а то, сколько масштаба и устойчивого ownership требуется для настоящего внутреннего PaaS.
Разработчику лучше, системе — не обязательно
DORA 2024 зафиксировала парадокс: использование внутренней платформы связано с ростом индивидуальной продуктивности на 8% и командной на 10%, но одновременно со снижением change throughput на 8% и change stability на 14%. Авторы предлагают осторожную интерпретацию через J-curve: незрелая платформа сначала добавляет переходные издержки. Возможны и менее удобные объяснения — дополнительная очередь, слишком толстая абстракция или платформа, оптимизированная по satisfaction вместо потока.
Здесь проходит граница между golden path и golden cage. Сэм Ньюман предупреждает: обязательная платформа теряет стимул быть удобной, потому что пользователь не может уйти. С другой стороны, security, compliance и аудит не работают как факультативная рекомендация. Разрешить всё — не продуктовый подход. Запретить любой выход — тоже. Легитимный мандат ограничивается проверяемыми инвариантами, а не конкретной реализацией каждого шага.
- обязательны identity, audit trail, encryption и policy evidence;
- предпочтительны, но заменяемы шаблон сервиса, CI/CD и интерфейс self-service;
- исключения имеют владельца, срок жизни и цену сопровождения;
- платформа измеряет не число созданных компонентов, а lead time, reliability и долю безопасно завершённых сценариев.
Новый цикл: GPU и агенты вместо kubectl
AI-нагрузки снова показали границу исходной модели Kubernetes. Device plugin framework появился в 1.8, но долго видел GPU только как целое число. MIG, time-slicing, отдельные scheduler и GPU Operator закрывали разрыв каждый своим способом. Dynamic Resource Allocation достиг GA в 1.34 после редизайна API, а fractional capacity всё ещё развивалась отдельно. Это тот же цикл: маленький примитив, растущие требования, экосистема костылей и более явная модель в ядре.
CNCF называет Kubernetes де-факто операционной системой для AI, но vendor-отчёты одновременно показывают низкую утилизацию дорогих GPU. Такие цифры нельзя смешивать: первая описывает adoption среди контейнерных пользователей, вторая — телеметрию конкретного оптимизатора с собственной выборкой. Вместе они формулируют хороший вопрос: помогает ли стандарт управлять workload или лишь делает знакомым интерфейс к новой неэффективности?
Убрать человека от kubectl хотели до LLM
Ещё в 2017 году Келси Хайтауэр сравнивал kubectl с новым SSH: прямое управление production человеком — симптом отсутствующего более высокого интерфейса. Сегодня эту роль примеряют K8sGPT, kubectl-ai, HolmesGPT, kagent и MCP-серверы. Но ассистирование нельзя выдавать за автономность.ITBench от IBM Research содержит 94 воспроизводимых SRE, CISO и FinOps сценария; лучшие агенты в исходной работе решили 13,8% SRE-задач, 25,2% security-задач и ни одной FinOps-задачи. Это далеко от права свободно менять production.
Полезный агент начинается с read-only диагностики, наследует identity и RBAC пользователя, показывает evidence и умеет передать расследование человеку. Де-факто популярный Kubernetes MCP Server из организации containers идёт напрямую в API server и имеет режимы--read-only и --disable-destructive. Наличие флага — ещё не governance, но оно правильно обозначает границу: право читать кластер и право менять его — разные продукты с разными evals.
Лестница read → recommend → approve → act → rollback должна быть привязана не к «умности модели», а к конкретной capability. Для restart pod, rollout undo и drain node нужны разные политики, sandbox, blast radius и критерии остановки. На каждом уровне сохраняются identity, policy decision, trace, human handoff и проверенный rollback. Иначе агент становится новым snippet: удобным escape hatch, который однажды превратится в неуправляемый API.
Как не добавить следующий слой слишком рано
Вопрос «нужен ли Kubernetes?» слишком грубый. Нужно выбрать толщину операционной модели. Команде из десяти человек может хватить Docker и managed deployment. Десяткам команд может быть нужен общий Kubernetes API, но не собственный портал. Full IDP оправдана, когда повторяемый спрос, compliance и стоимость координации действительно больше стоимости отдельного платформенного продукта.
| Модель | Когда уместна | Что даёт | Главный риск |
|---|---|---|---|
| Простой deployment | Небольшое число сервисов, одна команда, предсказуемый трафик | Минимальная поверхность отказа | Ручные операции и предел роста |
| Managed Kubernetes | Нужны orchestration API и экосистема, но не свой control plane | Стандарт и управляемая база | Эксплуатационный слой всё равно остаётся у вас |
| Thin platform | Несколько команд повторяют один delivery path | Шаблоны, policy и self-service без собственного SaaS | Нужно жёстко ограничивать толщину |
| Полноценная IDP | Много команд, высокий compliance и отдельная platform product function | Единый интерфейс и управляемые golden paths | Монополия, leaky abstractions и отдельный продукт в эксплуатации |
Scorecard перед новым слоем
Это не benchmark зрелости и не универсальный порог по числу разработчиков. Это шесть вопросов, которые заставляют посчитать цену ownership до того, как появится ещё один обязательный API.
| Проверка | Вопрос | Достаточное свидетельство |
|---|---|---|
| Проблема | Какую наблюдаемую боль снимает новый слой? | Не «нужен портал», а, например, медиана lead time и доля ручных согласований |
| Владелец | Кто дежурит и обновляет слой через три года? | Команда, бюджет, SLO, on-call и путь эскалации |
| Граница | Что остаётся общим и коррелированным? | ОС, CNI, GitOps hub, registry, identity, policy engine |
| Выход | Можно ли обойти абстракцию безопасно? | Документированный escape hatch и понятная цена исключения |
| Метрика | Что должно улучшиться у всей системы? | Throughput и stability вместе с DevEx, а не только satisfaction |
| Удаление | Как слой будет выключен, если не окупится? | Критерий закрытия, экспорт состояния и обратимая миграция |
Если нет измеримой проблемы, постоянного владельца и плана удаления, безопаснее не строить слой. Если проблема существует, но пользователей мало, начинайте с TVP: документации, шаблона и одной хорошо наблюдаемой capability. Портал, control plane и агент появляются только после того, как доказан повторяемый спрос.
Что стоит унести с собой
- 01У Kubernetes есть и существенная сложность распределённых систем, и случайная сложность собственных API. Списывать всё на требования пользователей так же неверно, как винить только YAML.
- 02Зрелость сделала Kubernetes привычным, но не бесплатным: значительная часть сложности переехала в эксплуатацию, платформенную команду и общий набор guardrails.
- 03Gateway API не обязательно короче Ingress. Его преимущество в другом: роли, связи, статусы и политики становятся явными и поэтому управляемыми.
- 04Много кластеров не означает много независимых failure domains. Blast radius задают общие коррелированные слои и одинаковые механизмы обновления.
- 05IDP и AI-агенты полезны не тогда, когда скрывают Kubernetes любой ценой, а когда ограничивают полномочия, сохраняют путь отладки и улучшают системные метрики delivery.
Первичные материалы, исследования и позиции практиков
Эволюция Kubernetes
- Kubernetes · 10 Years of Kubernetes — хронология проекта и исходные инженерные предпосылки
- ACM Queue · Borg, Omega, and Kubernetes — архитектурное происхождение и цена конфигурационной гибкости
- The New Stack · Kubernetes Needs a Complexity Budget — позиция сооснователя проекта о конечном бюджете сложности
- Kubernetes · PodSecurityPolicy Deprecation — пример API, созданного и удалённого внутри проекта
- Kubernetes · ValidatingAdmissionPolicy GA — встроенная policy-валидация на CEL
Исследования рынка
- CNCF · Annual Cloud Native Survey 2025 — production adoption, препятствия и формула Kubernetes is boring
Сеть и маршрутизация
- Wiz · IngressNightmare — первичное раскрытие цепочки уязвимостей; источник — security-вендор
- Kubernetes · Ingress NGINX Retirement — официальные причины закрытия и срок окончания поддержки
- Kubernetes · Steering and SRC Statement — масштаб использования и предупреждение о миграции
- Gateway API · Releases — актуальная ветка 1.6.x и статусы API
- Gateway API · GEP-713 Policy Attachment — модель политик и признанные сложности discoverability
- Kubernetes · nftables mode for kube-proxy — ванильная альтернатива линейным iptables-цепочкам
- Istio · Ambient mode reaches GA — sidecar-less dataplane без обязательного eBPF
Надёжность флота
- Datadog · Platform-level outage postmortem — коррелированный отказ через общий образ ОС и CNI
- AWS · EKS pricing — стоимость control plane и extended support
Платформенная инженерия
- Team Topologies · Thinnest Viable Platform — минимальная достаточная платформа как контрвес внутреннему PaaS
- Backstage · Public launch — исходная продуктовая модель developer portal
- DORA · Accelerate State of DevOps 2024 — продуктивность платформ и компромисс throughput/stability
- Sam Newman · Don't Call It A Platform — критика обязательных платформ и монопольного внутреннего продукта
- Charity Majors · The Future of Ops Is Platform Engineering — позиция run less software и требования к ops-компетенции
Российские кейсы
- Avito · Internal Developer Platform — one-button модель и скрытие Kubernetes от продуктовых команд
- T-Bank · Platform Engineering — масштаб, команда и длительность собственной платформы
- DevOpsConf · Why Internal Platforms Fail — интервью российских платформенных лидеров и критика мандата
AI-нагрузки и агенты
- Kubernetes · DRA in v1.34 — новая модель динамического выделения устройств
- IBM Research · ITBench — 94 воспроизводимых сценария SRE, security и FinOps
- containers · Kubernetes MCP Server — нативный API-клиент, read-only и destructive-action controls