Que es Service Mesh
Service mesh es una capa de infraestructura que gestiona la comunicacion entre microservicios. Separa la complejidad de la comunicacion entre servicios de la aplicacion y la controla de manera consistente.
Por que es necesario: A medida que aumentan los microservicios, se vuelve dificil asegurar la observabilidad, seguridad y confiabilidad de la comunicacion entre servicios. Service mesh resuelve estos problemas de manera unificada.
Desafios sin Service Mesh
flowchart LR
A["Servicio A"] --> B["Servicio B"]
Implementacion necesaria en cada servicio:
- Logica de reintentos
- Circuit breaker
- Timeout
- Gestion de certificados TLS
- Recoleccion de metricas
- Trazado
Patron Sidecar
Se despliega un proxy (sidecar) en cada Pod de servicio, y toda la comunicacion pasa a traves de el.
flowchart LR
subgraph Pod
App["Application<br/>(App)"]
Sidecar["Sidecar<br/>(Envoy)"]
App <-->|localhost| Sidecar
end
Sidecar <-->|"Toda la comunicacion pasa por aqui"| External["Externo"]
Arquitectura de Service Mesh
flowchart TB
subgraph ControlPlane["Control Plane"]
Config["Config<br/>Management"]
Telemetry["Telemetry<br/>Collection"]
Policy["Policy<br/>Enforcement"]
end
subgraph DataPlane["Data Plane"]
SA["Service A<br/>+ Sidecar"]
SB["Service B<br/>+ Sidecar"]
SC["Service C<br/>+ Sidecar"]
SA <--> SB <--> SC
end
ControlPlane -->|"Distribucion de configuracion"| DataPlane
Funciones Principales
1. Gestion de Trafico
# Istio VirtualService - Despliegue Canary
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1
weight: 90
- destination:
host: my-service
subset: v2
weight: 10
2. Circuit Breaker
# Istio DestinationRule
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: my-service
spec:
host: my-service
trafficPolicy:
outlierDetection:
consecutive5xxErrors: 5
interval: 30s
baseEjectionTime: 30s
3. Reintentos y Timeout
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
spec:
http:
- route:
- destination:
host: my-service
timeout: 10s
retries:
attempts: 3
perTryTimeout: 3s
retryOn: 5xx
4. mTLS (TLS Mutuo)
Encripta automaticamente la comunicacion entre servicios.
flowchart LR
A["Servicio A<br/>Certificado"] -->|mTLS| B["Servicio B<br/>Certificado"]
AutoManage["Gestion automatica"] -.-> A
AutoManage -.-> B
# Istio PeerAuthentication
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT
5. Observabilidad
| Tipo | Contenido |
|---|---|
| Metricas | Numero de solicitudes, latencia (p50, p90, p99), tasa de errores |
| Trazado | Relaciones de llamadas entre servicios, tiempo de procesamiento en cada servicio |
| Logs | Recoleccion automatica de logs de acceso |
Principales Service Meshes
| Herramienta | Caracteristicas |
|---|---|
| Istio | Rico en funciones, basado en Envoy, curva de aprendizaje alta |
| Linkerd | Ligero, hecho en Rust, simple |
| Consul Connect | HashiCorp, integracion con service discovery |
| AWS App Mesh | Integracion con AWS, basado en Envoy |
Istio vs Linkerd
| Aspecto | Istio | Linkerd |
|---|---|---|
| Funcionalidad | Rica | Suficiente |
| Consumo de recursos | Alto | Bajo |
| Complejidad | Alta | Baja |
| Comunidad | Grande | Media |
| CNCF | Graduado | Graduado |
Casos de Uso
Release Canary
| Dia | Trafico a v2 |
|---|---|
| Dia 1 | 1% |
| Dia 2 | 10% |
| Dia 3 | 50% |
| Dia 4 | 100% |
Test A/B
# Enrutamiento por header
http:
- match:
- headers:
x-user-group:
exact: beta
route:
- destination:
host: my-service
subset: v2
- route:
- destination:
host: my-service
subset: v1
Inyeccion de Fallas
# Inyectar retraso intencionalmente para pruebas
http:
- fault:
delay:
percentage:
value: 10
fixedDelay: 5s
route:
- destination:
host: my-service
Decidir la Adopcion
Casos Adecuados
- Muchos microservicios (10+)
- Patrones de comunicacion complejos
- Necesidad de seguridad zero trust
- Necesidad de control de trafico avanzado
- Uso de Kubernetes
Casos No Adecuados
- Pocos servicios (menos de 5)
- Arquitectura monolitica
- Patrones de comunicacion simples
- Recursos del equipo de operaciones limitados
Resumen
Service mesh es una infraestructura para separar la complejidad de la comunicacion entre microservicios de la aplicacion y gestionarla de manera unificada. Proporciona control de trafico, seguridad y observabilidad, pero tambien conlleva complejidad y sobrecarga de recursos. Considere el numero de servicios y la capacidad operativa antes de decidir la adopcion.
← Volver a la lista