En esta nueva entrega sobre service-mesh veremos el que probablemente se convertirá en el producto de referencia: Istio.
Analizaremos las funcionalidades que aporta, su arquitectura interna, la integración con productos de terceros así como su repercusión
dentro de las arquitecturas actuales. Realizaremos algunos ejemplos para mostrar la funcionalidad y configuración
Ponente:
Abraham Rodríguez está especializado en soluciones cloud native con arquitecturas de microservicios, stack con el que ha trabajado en diversos proyectos. Apasionado defensor de todo lo relacionado con cloud, metodologías ágiles, software libre y devops.
2. Índice
1. Introducción a service mesh
2. Have you met Istio?
3. Gestión de tráfico
4. Gestión de políticas y telemetría
5. Seguridad
Abraham Rodríguez
Arquitecto Cloud Native @ Paradigma
4. Have you met Istio?
Introducción: Repaso a service-mesh
“A service mesh is a dedicated infrastructure layer for handling
service-to-service communication. It’s responsible for the reliable
delivery of requests through the complex topology of services that
comprise a modern, cloud native application”
William Morgan, Buoyant CEO
April 2017
5. Have you met Istio?
Introducción: patrones y conceptos
Plano de datos
Plano de control
Sidecar-proxy
7. Have you met Istio?
Origen y propósito
“An open source project that provides a uniform way to connect, secure,
manage and monitor microservices”
“Imagine if we could transparently inject a layer of infrastructure
between a service and the network that gives operators the controls
they need while freeing developers from having to bake solutions to
distributed system problems into their code”
8. Have you met Istio?
Historia
24M
24S
11D
28N
31J
...
Istio es liberado Open Source en versión 0.1
Se publica Istio 1.0
Red Hat anuncia Openshift Service Mesh basado en Istio
Google anuncia la disponibilidad de Istio en GKE
Amazon estrena AWS App Mesh basado en Envoy
9. Have you met Istio?
Principales funcionalidades
● Circuit breaking, reintentos, outlier detection,
inyección de fallos (latencia y errores)
● Canary deployments, A/B testing, enrutado
por versiones y otros criterios
● Control de acceso por cuota
● Control de acceso por listas blancas / negras
● Trazabilidad distribuida
● Logging
● Métricas
● Integración con soluciones de terceros
● Autenticación a externos y entre proxies
● Autorización basada en roles con diversos
niveles de granularidad
Gestión del tráfico Gestión de políticas
Telemetría Seguridad
10. Have you met Istio?
Arquitectura y responsabilidades
12. Have you met Istio?
Gestión del tráfico con Pilot
● Responsabilidades:
○ registro / descubrimiento de servicios
○ configuración de los proxies Envoy
● El registro / configuración en Kubernetes se realiza
monitorizando el API para detectar cambios
● Istio incluye el concepto de versión para distinguir
versiones o entornos
● Opciones de enrutado:
○ En base a versión
○ En base a cabeceras
○ Por porcentajes
○ ...
● Podemos hacer enrutado del tráfico saliente
13. Have you met Istio?
Gestión del tráfico - flujo de petición
14. Have you met Istio?
Gestión del tráfico - proxies Envoy
● Pilot es quien realiza el descubrimiento pero los
proxies Envoy son los que hacen la comprobación
de salud de las instancias
● Se utiliza un sistema de retirada incremental de la
instancia similar al outlier detection
● Balanceo en cliente. Algoritmos:
○ Round robin
○ Random
○ Weighted least request
● Resiliencia de llamadas:
○ Timeouts
○ Reintentos con delay incremental
○ Circuit breaking
○ Outlier detection
○ Inyección de fallo (delay y error)
15. Have you met Istio?
Gestión del tráfico - Recursos
Enrutado. Machea peticiones a servicios o
versiones de servicios
Criterios: invocador, path, cabeceras …
Es donde se asigna porcentaje de llamadas a cada
versión, timeouts, reintentos, inyección de fallos...
Políticas a aplicar después del enrutado:
algoritmo de balanceo, circuit breaking.
Admite diferentes configuraciones por versión
Nos permite añadir entradas al registro para
enrutar peticiones fuera del descubrimiento del
service-mesh, por ejemplo a base de datos
Balanceo para las peticiones entrantes al
service-mesh. Una regla del gateway se puede
enganchar con un VirtualService
VirtualService DestinationRule
ServiceEntry Gateway
16. Have you met Istio?
Gestión del tráfico - Recursos
17. Have you met Istio?
Aplicación de ejemplo: BookInfo
18. Have you met Istio?
Gestión del tráfico - Ejemplos
1. Enrutado de peticiones:
a. Enrutar todo el tráfico a la v1 de reviews
b. Enrutar el tráfico en función de una cabecera
2. Migración de tráfico entre versiones
3. Configuración del gateway
4. Configuración de timeouts e inyección de delays
20. Have you met Istio?
Gestión de políticas y telemetría con Mixer
● Se integra con sistemas de terceros a través de
adaptadores para soportar su funcionalidad
● Los proxies cachean configuración de cuota y
autorización
● Los proxies acumulan en un buffer los datos de
telemetría
● A su vez Mixer cachea y acumula en un buffer los
datos correspondientes
22. Have you met Istio?
Gestión de políticas - Ejemplo: Limitación de cuota
kind: QuotaSpecBinding
metadata:
name: request-count
namespace: istio-system
spec:
quotaSpecs:
- name: request-count
namespace: istio-system
services:
- name: productpage
namespace: default
kind: QuotaSpec
metadata:
name: request-count
namespace: istio-system
spec:
rules:
- quotas:
- charge: 1
quota: requestcount
23. Have you met Istio?
Telemetría - Recursos
Cada pieza de información que se obtiene
(tiempo de procesamiento, IP del cliente ...)
Configuran la comunicación con las diferentes
soluciones de telemetría y control
Como mapear atributos con información para
nutrir a cada manejador
Que instancias envían a información a que
manejadores
Attributes Handlers
Instances Rules
24. Have you met Istio?
Telemetría - Visualización
● Generación del grafo de dependencias de servicios
● Métricas de uso del service-mesh con Grafana
● Visualizar trazabilidad distribuida con Jaeger
26. Have you met Istio?
Seguridad - Objetivos
“The goals of Istio Security are:
● Security by default: no changes needed for application code and
infrastructure
● Defense in depth: integrate with existing security systems to provide
multiple layers of defense
● Zero-trust network: build security solutions on untrusted networks”
28. Have you met Istio?
Seguridad - Autenticación
● Validamos la identidad entre servicios
utilizando certificados
● Para los servidores: se monitoriza el API de
K8s y para cada serviceAccount se genera un
par de claves y el certificado, almacenados
como secrets en Citadel, y que son asociados
a los pods
● Para los clientes: se valida contra el secure
naming de Pilot que dicha el dueño de dicho
certificado (serviceAccount) puede ejecutar
ese servicio
● Podemos validar la identidad del cliente a
través de su JWT
● Podemos proporcionar la clave pública para
la validación o enganchar con sistemas de
terceros
TLS mutuo Validación JWT
29. Have you met Istio?
Seguridad - Autorización
● La semántica de los permisos se basa en roles
(RBAC)
● Podemos introducir autorización a nivel de
comunicación entre servicios o de usuario con
servicio
● La configuración se hace a través de políticas que
proporciona Pilot
● Nos proporciona bastante flexibilidad porque
podemos definir permisos en base a propiedades de
la petición ...
● Podemos conectar la autorización con sistemas de
terceros a través de los handlers de Mixer
apiVersion: "rbac.istio.io/v1alpha1"
kind: RbacConfig
metadata:
name: default
spec:
mode: 'ON_WITH_INCLUSION'
inclusion:
namespaces: ["default"]