Ответ
Я использовал Istio в качестве service mesh для управления трафиком, обеспечения безопасности и сбора телеметрии в production-кластерах Kubernetes.
Основные сценарии применения и настройки:
- Управление трафиком:
- Canary-деплой и A/B-тестирование: Настройка
VirtualServiceиDestinationRuleдля маршрутизации части трафика на новую версию сервиса. - Трафик между неймспейсами: Использование
ServiceEntryиSidecarдля изоляции и контроля трафика.
- Canary-деплой и A/B-тестирование: Настройка
- Безопасность: Включение взаимного TLS (mTLS) между подами в mesh с помощью
PeerAuthentication. Настройка политик доступа на уровне сервисов с помощьюAuthorizationPolicy. - Наблюдаемость: Интеграция с Prometheus для сбора метрик (latency, errors, traffic). Использование Grafana и Kiali для визуализации топологии сервисов и анализа трафика. Настройка распределенного трейсинга через Jaeger.
- Упрощение Ingress: Замена стандартного Ingress Controller на Istio
GatewayиVirtualServiceдля более гибкого управления входящим трафиком с поддержкой gRPC, WebSockets и сложного роутинга на основе заголовков.
Пример конфигурации для канареечного (canary) деплоя:
# DestinationRule определяет подмножества (subsets) для разных версий деплоя
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews-dr
spec:
host: reviews-svc
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
# VirtualService управляет маршрутизацией трафика между subsets
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: reviews-vs
spec:
hosts:
- reviews-svc
http:
- route:
- destination:
host: reviews-svc
subset: v1
weight: 90 # 90% трафика на стабильную версию
- destination:
host: reviews-svc
subset: v2
weight: 10 # 10% трафика на новую версию для тестирования