Термин · Глоссарий B2B-ПО

Sidecar (Sidecar)

Sidecar – архитектурный паттерн, при котором вспомогательный контейнер развёртывается в одном Pod'е с основным приложением и расширяет его функциональность: проксирует трафик, собирает логи, управляет сертификатами – без изменения кода приложения.

Буква «S» В категориях: 3 Платформ: 6+

Введение

Sidecar (боковая коляска мотоцикла) – архитектурный паттерн, при котором вспомогательный процесс или контейнер развёртывается вместе с основным приложением, разделяя с ним жизненный цикл, ресурсы и сеть, но сохраняя полную независимость кодовой базы. Паттерн назван по аналогии с боковой коляской мотоцикла: она функционирует совместно с мотоциклом, но является отдельным элементом.

В Kubernetes sidecar реализуется как дополнительный контейнер внутри Pod'а. Контейнеры в одном Pod'е разделяют сетевое пространство имён (один IP-адрес), пространство имён PID и тома (volumes), что позволяет sidecar перехватывать трафик или читать файлы приложения.

История и контекст

Паттерн sidecar описан в книге Microsoft Patterns & Practices «Cloud Design Patterns» (2014). Широкое распространение получил с развитием Kubernetes и, особенно, service mesh. Именно service mesh Istio сделал sidecar общеизвестным: Envoy proxy автоматически внедряется в каждый Pod как sidecar.

В Kubernetes 1.28 (2023) был представлен нативный API для Init Containers как sidecar (через restartPolicy: Always), что решило проблему порядка запуска и завершения контейнеров. До этого sidecar могли завершиться раньше основного контейнера или наоборот – вызывая проблемы с graceful shutdown.

Как это работает

В Pod'е с sidecar работают минимум два контейнера:

  • Main Container: бизнес-логика приложения.
  • Sidecar Container: вспомогательный контейнер, расширяющий функциональность.

Типичные сценарии использования sidecar:

  • Proxy (Service Mesh): Envoy/Linkerd proxy перехватывает сетевой трафик через iptables-правила init-контейнера. Приложение не знает о прокси – оно думает, что напрямую соединяется с другими сервисами.
  • Log Shipping: Fluentd или Fluent Bit читает логи из общего тома (/var/log/app), парсит и отправляет в Elasticsearch/Loki.
  • Secrets Management: Vault Agent Injector монтирует секреты из HashiCorp Vault в общий volume, периодически обновляя их.
  • Configuration Refresh: sidecar следит за ConfigMap/внешним хранилищем и обновляет конфигурационные файлы без перезапуска основного контейнера.
  • Metrics Collection: sidecar-экспортёр Prometheus собирает метрики и предоставляет их через /metrics endpoint.

В service mesh sidecar работает следующим образом:

  1. Init-контейнер (istio-init) настраивает iptables-правила, перенаправляя весь TCP-трафик через Envoy.
  2. Приложение инициирует соединение с целевым сервисом.
  3. Iptables перенаправляет трафик на локальный порт Envoy (15001 для исходящего, 15006 для входящего).
  4. Envoy применяет политики, добавляет заголовки трассировки, собирает метрики и проксирует трафик.

Преимущества и недостатки паттерна

Преимущества:

  • Разделение ответственности: команда приложения не занимается сетевыми политиками или сбором логов.
  • Независимость языка: sidecar работает с любым языком программирования приложения.
  • Повторное использование: один и тот же sidecar (Envoy, Fluentd) используется во всех Pod'ах.
  • Обновление без даунтайма: sidecar можно обновить, не пересобирая образ приложения.

Недостатки:

  • Дополнительное потребление ресурсов: каждый sidecar требует CPU и RAM.
  • Усложнение отладки: трафик проходит через дополнительный слой.
  • Задержка: дополнительные 1-5 мс из-за прокси.
  • Управление жизненным циклом: до Kubernetes 1.28 порядок запуска/остановки мог создавать проблемы.

Где применяется

  • Service Mesh: Envoy (Istio), linkerd-proxy (Linkerd) – наиболее массовое применение sidecar.
  • Безопасность: Vault Agent для инъекции секретов, cert-manager для сертификатов.
  • Observability: OpenTelemetry Collector как sidecar для сбора и экспорта трасс.
  • Legacy Migration: sidecar адаптирует старые приложения к cloud-native окружению без переписывания кода.

Связь с другими понятиями

  • Service Mesh – sidecar является основным паттерном реализации service mesh data plane.
  • Istio – использует Envoy sidecar, автоматически внедряемый через MutatingWebhookConfiguration.
  • Log Aggregation – sidecar-паттерн широко используется для отправки логов в централизованное хранилище.
  • Kubernetes – Pod как единица развёртывания обеспечивает инфраструктурную основу для sidecar.

Понятия из глоссария Цифрового маркетплейса, которые часто встречаются вместе с термином «Sidecar».

Платформы класса «Sidecar»

Решения из каталога Цифрового маркетплейса, относящиеся к этому классу ПО. Карточки ведут на полные карточки платформ с тарифами, обзорами и кейсами внедрения.

SP

SET Prisma 7

Управление производством (MES)
Промышленная система управления производственными и логистическими процессами с акцентом на планирование, учёт...
Цена по запросу
Подробнее →
MEScase — российское ПО для мониторинга, аналитики и оптимизации технологических, производственных и бизнес-пр...
Цена по запросу
Подробнее →
MB

MES Builder. Системное ядро

Управление производством (MES)
MES Builder. Системное ядро — гибридная платформа для разработки интегрированных MES-систем с поддержкой IIoT....
Цена по запросу
★ 4.7
Подробнее →

Категории каталога

Разделы каталога Цифрового маркетплейса, в которые входят решения, использующие «Sidecar».

Где применяется

Отрасли, в которых «Sidecar» используется на практике. Откройте отраслевой раздел Цифрового маркетплейса, чтобы увидеть подходящие решения, кейсы и новости.

Частые вопросы про Sidecar

Как sidecar-прокси перехватывает трафик приложения?

Через iptables-правила, настраиваемые init-контейнером (istio-init). Правила перенаправляют весь TCP-трафик Pod'а через порты Envoy (15001/15006), прозрачно для приложения.

Можно ли отключить sidecar для конкретного Pod'а?

Да. В Istio достаточно добавить аннотацию sidecar.istio.io/inject: 'false' в спецификацию Pod'а. Это исключит Pod из mesh без изменения namespace-настроек.

Что такое init-контейнер в контексте sidecar?

Init-контейнер выполняется до запуска основных контейнеров. В Istio istio-init настраивает iptables. С Kubernetes 1.28 sidecar-контейнеры могут быть Init Containers с restartPolicy: Always.

Чем sidecar отличается от DaemonSet?

DaemonSet запускает по одному Pod'у на каждом узле кластера. Sidecar работает внутри Pod'а рядом с конкретным приложением. DaemonSet подходит для node-level операций (Cilium, log collector).

Какова альтернатива sidecar в service mesh?

Istio Ambient Mode использует ztunnel – DaemonSet на каждом узле – вместо sidecar в каждом Pod'е. Это снижает накладные расходы на память и CPU при сохранении функциональности mTLS.