Ответ
Service Mesh — это выделенный инфраструктурный слой, предназначенный для управления, наблюдения и обеспечения безопасности сетевого взаимодействия между микросервисами (pod-ами) в кластере Kubernetes. Его основная задача — вынести сквозные функциональные требования (cross-cutting concerns) из кода приложения в конфигурируемую платформу.
Ключевые возможности, которые предоставляет Service Mesh:
- Умная маршрутизация трафика: Canary-деплойменты, A/B-тестирование, постепенный roll-out, инжекция ошибок для тестирования отказоустойчивости.
- Безопасность: Сквозное шифрование трафика между сервисами с использованием взаимного TLS (mTLS) без изменений в коде приложения.
- Наблюдаемость (Observability): Автоматический сбор детализированных метрик, распределенной трассировки (tracing) и логов для всего межсервисного трафика.
- Надежность: Автоматические повторные попытки, таймауты, ограничители запросов (circuit breakers) и отказоустойчивая балансировка нагрузки.
Архитектура: Чаще всего реализуется по модели sidecar-прокси. Рядом с каждым pod-ом вашего приложения внедряется легковесный прокси-контейнер (например, Envoy в Istio). Весь входящий и исходящий сетевой трафик приложения проходит через этот прокси, который и применяет все политики mesh.
Пример (Istio): Настройка canary-развертывания.
Допустим, у вас есть Deployment myapp с версией v1 (метка version: v1). Вы развернули новую версию v2. VirtualService и DestinationRule направляют 90% трафика на v1 и 10% на v2.
# DestinationRule определяет подмножества (subsets) на основе меток pod-ов.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: myapp
spec:
host: myapp-svc.namespace.svc.cluster.local
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
# VirtualService определяет правила маршрутизации между подмножествами.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- myapp-svc.namespace.svc.cluster.local
http:
- route:
- destination:
host: myapp-svc.namespace.svc.cluster.local
subset: v1
weight: 90
- destination:
host: myapp-svc.namespace.svc.cluster.local
subset: v2
weight: 10
Популярные реализации: Istio, Linkerd, Consul Connect. Выбор зависит от требований к сложности, производительности и ресурсоемкости.