Gestión del tráfico
Las capacidades de gestión del tráfico de Istio permiten un control detallado del flujo de tráfico dentro de la malla de servicios.
Índice
- Gateway y VirtualService
- Enrutamiento
- DestinationRule ⭐ Concepto esencial
- División del tráfico
- Reintentos y tiempo de espera
- Balanceo de carga
- Circuit Breaker
- Inyección de fallos
- Duplicación del tráfico
- Afinidad de sesión
- Control de salida
- ServiceEntry (Gestión de servicios externos)
Descripción general
La gestión del tráfico es una de las funciones principales de Istio y permite realizar las siguientes operaciones sin cambios en el código:
Funciones principales
1. Enrutamiento inteligente
- Basado en rutas:
/api/v1→ Service A,/api/v2→ Service B - Basado en encabezados:
User-Agent: Mobile→ Versión móvil - Basado en cookies: Enrutar usuarios específicos a versiones específicas
- Basado en ponderación: Distribuir el tráfico por proporción
2. Estrategias de Deployment
Canary Deployment:
# Only 10% to new version
route:
- destination:
host: reviews
subset: v1
weight: 90
- destination:
host: reviews
subset: v2
weight: 10Blue/Green Deployment:
# Instant switch
route:
- destination:
host: reviews
subset: v2 # Switch to Green
weight: 1003. Patrones de resiliencia
- Circuit Breaker: Aislar servicios con fallos
- Retry: Reintentos automáticos
- Timeout: Límites de tiempo de respuesta
- Rate Limiting: Control de la tasa de solicitudes
4. Pruebas y depuración
- Traffic Mirroring: Replicar el tráfico de producción para pruebas
- Fault Injection: Inyección intencional de fallos
- A/B Testing: Ofrecer diferentes versiones a distintos grupos de usuarios
Recursos principales
Gateway
Define el punto de entrada para el tráfico externo hacia la malla.
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "myapp.example.com"VirtualService
Define cómo enrutar las solicitudes.
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- uri:
prefix: "/v2"
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1DestinationRule
Define las políticas para el Service de destino.
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
trafficPolicy:
loadBalancer:
simple: LEAST_REQUEST
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2Ejemplos prácticos
Canary Deployment seguro
# Step 1: Start with 5% traffic
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews-canary
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 95
- destination:
host: reviews
subset: v2
weight: 5Después de monitorear, aumente gradualmente si no hay problemas:
- 5% → 10% → 25% → 50% → 100%
Enrutamiento basado en encabezados (pruebas de desarrolladores)
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews-dev
spec:
hosts:
- reviews
http:
# Developers use new version
- match:
- headers:
x-dev-user:
exact: "true"
route:
- destination:
host: reviews
subset: v2
# Regular users use stable version
- route:
- destination:
host: reviews
subset: v1Circuit Breaker + Retry
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: reviews-resilient
spec:
host: reviews
trafficPolicy:
# Connection Pool settings
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 50
maxRequestsPerConnection: 2
# Circuit Breaker
outlierDetection:
consecutiveErrors: 5
interval: 30s
baseEjectionTime: 30s
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews-retry
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
retries:
attempts: 3
perTryTimeout: 2s
retryOn: 5xx,reset,connect-failure
timeout: 10sFlujo de tráfico
Ruta de aprendizaje
Para aprender eficazmente la gestión del tráfico, se recomienda el siguiente orden:
Gateway y VirtualService ⭐ Punto de partida
- Comprender los conceptos básicos
- Manejo del tráfico externo
- Patrones de enrutamiento avanzados
- Enrutamiento condicional
DestinationRule ⭐ Concepto esencial
- Comprender el concepto de Subset
- Fundamentos de Traffic Policy
- Integración con VirtualService
- Canary Deployment
- Pruebas A/B
- Recuperación ante fallos
- Control del tiempo de respuesta
- Diversos algoritmos
- Optimización del rendimiento
- Aislamiento de fallos
- Prevención de fallos en cascada
- Pruebas de fallos
- Chaos Engineering
- Pruebas de producción
- Validación de nuevas versiones
- Sticky Session
- Conservación del estado
- Acceso a servicios externos
- Fortalecimiento de la seguridad
- Registro de servicios externos
- Integración con Egress Gateway
Prácticas recomendadas
1. Implementación gradual
# ❌ Bad example: 100% at once
weight: 100
# ✅ Good example: Gradual increase
# 5% → Monitor → 10% → Monitor → ...2. Configure siempre Timeout
# ✅ Always set timeout
http:
- route:
- destination:
host: reviews
timeout: 10s3. Use Retry con cuidado
# ✅ Only when idempotency is guaranteed
retries:
attempts: 3
perTryTimeout: 2s
retryOn: 5xx,reset,connect-failure4. Ajuste los umbrales de Circuit Breaker
# ✅ Adjust according to service characteristics
outlierDetection:
consecutiveErrors: 5 # Adjust per service
interval: 30s
baseEjectionTime: 30s
maxEjectionPercent: 50 # Maximum 50% ejection5. Monitoree las métricas
Monitoree siempre al modificar la gestión del tráfico:
- Tasa de solicitudes: Cambio en el número de solicitudes
- Tasa de errores: Proporción de errores
- Latencia: Latencia P50, P95, P99
- Tasa de éxito: Proporción de éxitos
Solución de problemas
El tráfico no se está enrutando
# 1. Check VirtualService
kubectl get virtualservice -n <namespace>
kubectl describe virtualservice <name> -n <namespace>
# 2. Check DestinationRule
kubectl get destinationrule -n <namespace>
# 3. Check pod labels
kubectl get pods --show-labels -n <namespace>
# 4. Analyze Istio configuration
istioctl analyze -n <namespace>La ponderación no se está aplicando
# Check Envoy configuration
istioctl proxy-config routes <pod-name> -n <namespace>
# Check cluster information
istioctl proxy-config clusters <pod-name> -n <namespace>Próximos pasos
- Seguridad: mTLS y autenticación/autorización
- Observabilidad: Métricas, logs, traces
- Resiliencia: Rate Limiting, Zone Aware Routing
Referencias
- Gestión del tráfico de Istio
- Referencia de VirtualService
- Referencia de DestinationRule
- Referencia de Gateway
Cuestionario
Para comprobar lo aprendido en este capítulo, pruebe el Cuestionario de gestión del tráfico de Istio.