senior
Что такое Service Mesh?
Service Mesh — это инфраструктурный слой, управляющий межсервисным взаимодействием через sidecar-прокси, развёрнутые рядом с каждым сервисом. Он берёт на себя сетевые задачи (mTLS, retry, трассировка) без изменения кода приложения.
Пример
┌─── Data Plane ──────────────────────────────────────────┐
│ │
│ ┌──────┐ ┌───────┐ ┌──────┐ ┌───────┐ │
│ │ App A│─│Proxy A│──────►│Proxy B│─│ App B │ │
│ └──────┘ └───┬───┘ └───┬───┘ └──────┘ │
│ │ │ │
└───────────────┼───────────────┼────────────────────────┘
│ │
┌─── Control Plane ─────────────┼───────────────────────┐
│ ┌────────────▼───────────────▼──────────────┐ │
│ │ Istio Control Plane (istiod) │ │
│ │ - Маршрутизация - mTLS-сертификаты │ │
│ │ - Политики - Конфигурация прокси │ │
│ └───────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘
Что предоставляет Service Mesh
- Наблюдаемость (Observability) — метрики, трассировка, логирование автоматически, без изменения кода.
- Безопасность — mTLS между всеми сервисами, RBAC-политики.
- Управление трафиком — canary deployments, A/B тестирование, fault injection.
- Отказоустойчивость — retry, timeout, circuit breaker на уровне прокси.
Популярные решения
| Решение | Характеристика |
|---|---|
| Istio | Наиболее функциональный, на основе Envoy. Стандарт де-факто |
| Linkerd | Легковесный, проще в эксплуатации |
| Consul Connect | От HashiCorp, интегрирован с Consul |
Пример Istio: canary deployment и fault injection
# Направить 90% трафика на v1 и 10% на v2
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: payment-service
spec:
hosts:
- payment-service
http:
- route:
- destination:
host: payment-service
subset: v1
weight: 90
- destination:
host: payment-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: payment-service
spec:
host: payment-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
# Fault injection для тестирования устойчивости
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: customer-service
spec:
hosts:
- customer-service
http:
- fault:
delay:
percentage:
value: 10 # 10% запросов получат задержку
fixedDelay: 5s
abort:
percentage:
value: 5 # 5% запросов получат ошибку 500
httpStatus: 500
route:
- destination:
host: customer-service
Когда нужен Service Mesh
- Много микросервисов (50+) — ручное управление сетевыми политиками невозможно.
- Строгие требования к безопасности (mTLS везде).
- Нужна единообразная наблюдаемость без изменения кода сервисов.
Когда НЕ нужен
- Мало сервисов (менее 10-15).
- Нет Kubernetes.
- Команда не готова к дополнительной операционной сложности.
На собеседовании: объясните архитектуру: Data Plane (sidecar-прокси) + Control Plane (управление). Ключевое преимущество: разработчик пишет только бизнес-логику, всё сетевое (mTLS, retry, трассировка) обеспечивается mesh’ем. Частая ошибка — предлагать Service Mesh для 5 сервисов.