SlideShare una empresa de Scribd logo
1 de 55
Descargar para leer sin conexión
Service mesh: abriendo en canal Envoy
Noviembre 2018
Service mesh: abriendo en canal Envoy
Sobre nosotros
@luismoramedina
Luis Mora Medina
Arquitecto software @Paradigma
Abraham Rodríguez
Arquitecto Cloud Native @Paradigma
Índice
AUTORES Y CONTACTO
1. Repaso a service-mesh
2. Funcionalidades
3. Ejemplo de aplicación
4. Configuración y uso
5. Necesidad de un plano de control
6. Conclusiones
Abraham Rodríguez
Arquitecto Cloud Native
Luis Mora Medina
Arquitecto de Software
Service mesh: abriendo en canal Envoy
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
Service mesh: abriendo en canal Envoy
Repaso a service mesh: patrón proxy-sidecar & plano de control
Control plane
Patrón proxy-sidecar:
● Acompaña siempre a la aplicación
● Actuando como proxy
● Intercepta y maneja la complejidad de red
● Independiente del lenguaje de
implementación
Plano de control:
● Coordina el plano de datos para que
funcione como un único sistema integrado
● Monitoriza el sistema en su conjunto
● Securiza el sistema en su conjunto
Envoy Envoy
Funcionalidades
Service mesh: abriendo en canal Envoy
Funcionalidades que cubre Envoy
● Enrutado y balanceo: mirroring de peticiones,
diferentes algoritmos de balanceo, reintentos
● Protocolos de comunicación: HTTP1, HTTP2, gRPC
● Service discovery: DNS, consumo de APIs
● Health check: activo y pasivo
● Edge proxy: punto de entrada único al sistema.
● Cambio de configuración en caliente
“The network should be transparent to applications. When network and
application problems do occur it should be easy to determine the source of
the problem.”
● Gestión del fallo: circuit breaking, timeout,
limitación de carga.
● Monitorización: recolección de métricas,
trazabilidad distribuida
● Integración de métricas con BBDD: MongoDB,
DynamoDB
● TLS, JWT validation
Service mesh: abriendo en canal Envoy
Principales recursos en Envoy
Podemos tener varios dentro de una misma
instancia de Envoy y pueden tener
comportamientos diferentes en base a los filtros
que definamos
Estadísticas, trazabilidad distribuida, reescritura de
cabeceras, logado …
Mapea dominios a clusters, enrutado por path,
reintentos, gestión de timeout, priorización
Algoritmo de balanceo, timeouts, descubrimiento
de instancias, gestión del fallo
Listeners HttpConnectionManager
Http Routing Clusters
Ejemplo de aplicación
Service mesh: abriendo en canal Envoy
Ejemplo de aplicación
Configuración y uso
1. Configuración y peticiones
2. Descubrimiento de instancias
3. Ingress
4. Gestión de error
a. Timeout
b. Circuit breaking
c. Outlier detection
5. Trazabilidad distribuida
Configuración y uso
Configuración y peticiones
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
En qué dirección y puerto va a
escuchar dicho listener
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
En qué dirección y puerto va a
escuchar dicho listener
Configuración del filtro:
● nombrados
● dominios asignados
● mapeo rutas - clusters
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
Configuración del cluster:
● Timeout
● Descubrimiento
● Algoritmo de balanceo
Service mesh: abriendo en canal Envoy
Ejemplos de configuración
Configuración del cluster:
● Timeout
● Descubrimiento
● Algoritmo de balanceo
Administración de Envoy
● Logs
● Puerto de Escucha
Interfaz de administración
Service mesh: abriendo en canal Envoy
Llamadas entre microservicios
- address:
socket_address:
address: 0.0.0.0
port_value: 9900
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
codec_type: auto
stat_prefix: egress_mesh_http
route_config:
name: mesh_route
virtual_hosts:
- name: service_mesh
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster_header: ":authority"
http_filters:
- name: envoy.router
config: {}
Puertos configurados:
● 10000: Entrada
● 9900: Salida
● 8081: Administración
Service mesh: abriendo en canal Envoy
Llamadas entre microservicios
- address:
socket_address:
address: 0.0.0.0
port_value: 9900
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
codec_type: auto
stat_prefix: egress_mesh_http
route_config:
name: mesh_route
virtual_hosts:
- name: service_mesh
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster_header: ":authority"
http_filters:
- name: envoy.router
config: {}
Puertos configurados:
● 10000: Entrada
● 9900: Salida
● 8081: Administración
Service mesh: abriendo en canal Envoy
Llamadas entre microservicios
- address:
socket_address:
address: 0.0.0.0
port_value: 9900
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
codec_type: auto
stat_prefix: egress_mesh_http
route_config:
name: mesh_route
virtual_hosts:
- name: service_mesh
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster_header: ":authority"
http_filters:
- name: envoy.router
config: {}
Puertos configurados:
● 10000: Entrada
● 9900: Salida
● 8081: Administración
El cluster invocado se
determina por la cabecera
Host, reconvertida a
:authority
Código de ejemplo
Descubrimiento de instancias
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters
● Static: definir directamente el listado de instancias
● Strict DNS: cada IP devuelta por el DNS es considerada un
host
● Logical DNS: cada vez que se necesita una nueva conexión
se utiliza la primera IP devuelta por el DNS
● SDS: API REST invocada periodicamente para resolver las
instancias que componen un cluster. 2 versiones
● ...
“SDS is the preferred service discovery mechanism for
a few reasons
● Envoy has explicit knowledge of each upstream host (vs.
routing through a DNS resolved load balancer) and can
make more intelligent load balancing decisions.
● Extra attributes carried in the discovery API response for
each host inform Envoy of the host’s load balancing
weight, canary status, zone …”
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters
● Static: definir directamente el listado de instancias
● Strict DNS: cada IP devuelta por el DNS es considerada un
host
● Logical DNS: cada vez que se necesita una nueva conexión
se utiliza la primera IP devuelta por el DNS
● SDS: API REST invocada periodicamente para resolver las
instancias que componen un cluster. 2 versiones
● ...
“SDS is the preferred service discovery mechanism for
a few reasons
● Envoy has explicit knowledge of each upstream host (vs.
routing through a DNS resolved load balancer) and can
make more intelligent load balancing decisions.
● Extra attributes carried in the discovery API response for
each host inform Envoy of the host’s load balancing
weight, canary status, zone …”
Su implementación
● El microservicio se registra en el servicio de
descubrimiento
● El registro de instancias se almacena en DynamoDB
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters
● Static: definir directamente el listado de instancias
● Strict DNS: cada IP devuelta por el DNS es considerada un
host
● Logical DNS: cada vez que se necesita una nueva conexión
se utiliza la primera IP devuelta por el DNS
● SDS: API REST invocada periodicamente para resolver las
instancias que componen un cluster. 2 versiones
● ...
“SDS is the preferred service discovery mechanism for
a few reasons
● Envoy has explicit knowledge of each upstream host (vs.
routing through a DNS resolved load balancer) and can
make more intelligent load balancing decisions.
● Extra attributes carried in the discovery API response for
each host inform Envoy of the host’s load balancing
weight, canary status, zone …”
Su implementación
● El microservicio se registra en el servicio de
descubrimiento
● El registro de instancias se almacena en DynamoDB
NOT VALID
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters
● Static: definir directamente el listado de instancias
● Strict DNS: cada IP devuelta por el DNS es considerada un
host
● Logical DNS: cada vez que se necesita una nueva conexión
se utiliza la primera IP devuelta por el DNS
● SDS: API REST invocada periodicamente para resolver las
instancias que componen un cluster. 2 versiones
● ...
“SDS is the preferred service discovery mechanism for
a few reasons
● Envoy has explicit knowledge of each upstream host (vs.
routing through a DNS resolved load balancer) and can
make more intelligent load balancing decisions.
● Extra attributes carried in the discovery API response for
each host inform Envoy of the host’s load balancing
weight, canary status, zone …”
Su implementación
● El microservicio se registra en el servicio de
descubrimiento
● El registro de instancias se almacena en DynamoDB
Nuestra visión
● No queremos delegar a la aplicación la responsabilidad del
registro
● No queremos utilizar DynamoDB
● No queremos utilizar los servicios de descubrimiento de
Kubernetes - perdemos funcionalidad de Envoy
NOT VALID
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters
● Static: definir directamente el listado de instancias
● Strict DNS: cada IP devuelta por el DNS es considerada un
host
● Logical DNS: cada vez que se necesita una nueva conexión
se utiliza la primera IP devuelta por el DNS
● SDS: API REST invocada periodicamente para resolver las
instancias que componen un cluster. 2 versiones
● ...
“SDS is the preferred service discovery mechanism for
a few reasons
● Envoy has explicit knowledge of each upstream host (vs.
routing through a DNS resolved load balancer) and can
make more intelligent load balancing decisions.
● Extra attributes carried in the discovery API response for
each host inform Envoy of the host’s load balancing
weight, canary status, zone …”
Su implementación
● El microservicio se registra en el servicio de
descubrimiento
● El registro de instancias se almacena en DynamoDB
Nuestra visión
● No queremos delegar a la aplicación la responsabilidad del
registro
● No queremos utilizar DynamoDB
● No queremos utilizar los servicios de descubrimiento de
Kubernetes - perdemos funcionalidad de Envoy
Nuestra solución
● Consultar el API de Kubernetes
NOT VALID
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters: configuración
- name: sds
connect_timeout: 0.50s
type: strict_dns
lb_policy: round_robin
hosts:
- socket_address:
address: sds
port_value: 80
Cluster de SDS
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters: configuración
- name: pet
connect_timeout: 0.50s
type: eds
lb_policy: round_robin
eds_cluster_config:
eds_config:
api_config_source:
api_type: REST_LEGACY
cluster_names: sds
refresh_delay: 60s
- name: sds
connect_timeout: 0.50s
type: strict_dns
lb_policy: round_robin
hosts:
- socket_address:
address: sds
port_value: 80
Cluster de SDS Referenciar al SDS
Service mesh: abriendo en canal Envoy
Descubrimiento de clusters: API v2
Disponible para diferentes protocolos
Utilizando Protocol Buffers
Nos permite configurar cualquier recurso
Cambios de configuración en caliente
Ingress
Service mesh: abriendo en canal Envoy
Ingress
Envoy can act as an edge reverse proxy
An edge server is any server that resides on the
“edge” between two networks, typically
between a private network and the internet.
A reverse proxy server is a type of proxy server
that typically sits behind the firewall in a private
network and directs client requests to the
appropriate backend server. A reverse proxy
provides an additional level of abstraction and
control to ensure the smooth flow of network
traffic between clients and servers.
Service mesh: abriendo en canal Envoy
Ingress
route_config:
name: ingress_route
virtual_hosts:
- name: service
domains:
- "*"
routes:
- match:
prefix: "/pet/"
route:
cluster: pet
prefix_rewrite: "/"
- match:
prefix: "/petstore/"
route:
cluster: petstore
prefix_rewrite: "/"
Mapeamos el cluster de cada
servicio a un path con el
mismo nombre
Con el prefix_rewrite evitamos
el envío del mapeo al servidor
Gestión de error
Service mesh: abriendo en canal Envoy
Gestión de error
Control de rating, límite de carga, peticiones
concurrentes
El circuit breaking de Martin Fowler
Retirada de nodos en función de errores 500,
errores de gateway, latencias, errores
consecutivos, porcentaje de errores,
healthy_panic_threshold
Timeouts a nivel general, a nivel de ruta
Circuit breaking
Outlier Detection
Gestión de timeout y
reintentos
Service mesh: abriendo en canal Envoy
Gestión de error
Service mesh: abriendo en canal Envoy
Circuit breaking
# in petstore configuration
- name: pet
connect_timeout: 0.50s
type: eds
lb_policy: round_robin
circuit_breakers:
thresholds:
- priority: DEFAULT
max_pending_requests: 3
max_connections: 5
RATE LIMIT = 5 + 3
SLEEP 2s
Service mesh: abriendo en canal Envoy
Outlier detection
# in ingress configuration
outlier_detection:
consecutive_5xx: 3
interval: 10s
base_ejection_time: 10s
max_ejection_percent: 100
common_lb_config:
healthy_panic_threshold:
value: 0.0
OPEN CIRCUIT ON
3 FAILURES
POST /health/{statusCode}
GET /health >> statusCode
Service mesh: abriendo en canal Envoy
Timeouts
# in petstore configuration
routes:
- match:
prefix: "/"
route:
cluster_header: ":authority"
timeout: 1s
TIMEOUT OF 1s
>> 503
SLEEP 2s
Service mesh: abriendo en canal Envoy
Retries
# in ingress configuration
routes:
- match:
prefix: "/"
route:
cluster_header: ":authority"
retry_policy:
retry_on: 5xx
num_retries: 3
RETRY 3 TIMES
IF 5XX
POST /health/{statusCode}
GET /health >> statusCode
Trazabilidad distribuida
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
tracing:
operation_name: egress
Service mesh: abriendo en canal Envoy
Trazabilidad distribuida
Configuración
del filtro
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
tracing:
operation_name: egress
Service mesh: abriendo en canal Envoy
Trazabilidad distribuida con Zipkin
- name: zipkin
connect_timeout: 1s
type: strict_dns
lb_policy: round_robin
hosts:
- socket_address:
address: zipkin
port_value: 80
tracing:
http:
name: envoy.zipkin
config:
collector_cluster: zipkin
collector_endpoint: "/api/v1/spans"
Definición del
cluster de
zipkin
Configuración
de cliente
Zipkin
Configuración
del filtro
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
tracing:
operation_name: egress
Service mesh: abriendo en canal Envoy
Trazabilidad distribuida con Jaeger
tracing:
http:
name: envoy.dynamic.ot
config:
library: .../libjaegertracing_plugin.so
config:
service_name: petstore
sampler:
type: const
param: 1
reporter:
localAgentHostPort: jaeger:6831
Configuración
del filtro
wget -O
.../libjaegertracing_plugin.so
https://github.com/jaegertraci
ng/.../libjaegertracing_plugin.li
nux_amd64.so
Instalación del
agente de
jaeger
Configuración del
cliente nativo de
jaeger
Seguridad
Service mesh: abriendo en canal Envoy
Seguridad
Configuración de certificados local o remota
(mediante Secret Discovery Service SDS),
terminación y inicio de SSL, autenticación mutua,
filtros de ssl
Validación de tokens JWT, carga de fichero de
claves remoto, fichero local o inline
TLS
End user
authentication
Filtro de autorización, Role Based Access Control
por ruta
RBAC
Service mesh: abriendo en canal Envoy
Validación de tokens JWT
- name: envoy.filters.http.jwt_authn
config:
providers:
jwt_provider:
issuer: test
local_jwks:
inline_string: ...public key...
forward: true
forward_payload_header: "plain-auth"
rules:
- match:
prefix: /
requires:
provider_and_audiences:
provider_name:jwt_provider
audiences: pets.read
JWT validation
Plain authentication
is propagated
Necesidad de un plano de control
Service mesh: abriendo en canal Envoy
Necesidad de plano de control
● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza
● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia
Service mesh: abriendo en canal Envoy
Necesidad de plano de control
TRABAJO ENGORROSO
● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza
● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia
Service mesh: abriendo en canal Envoy
Necesidad de plano de control
● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza
● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia
“The control plane takes a set of isolated stateless sidecar proxies
and turns them into a distributed system.”
TRABAJO ENGORROSO
“Ultimately, the goal of a control plane is to set policy that will
eventually be enacted by the data plane. More advanced control
planes will abstract more of the system from the operator and
require less handholding”
Matt Klein, Engineer @lyft
Conclusiones
Service mesh: abriendo en canal Envoy
Conclusiones
Proxy muy ligero
Gestión avanzada de circuit breaking
Integración con múltiples productos
Soporte a validación de JWT
Carga en caliente
“Retroalimentación” funcionalidades istio-envoy
Extensible, pero difícil de extender*
Necesita de componentes extra para algunas de sus
funcionalidades
Complejidad de configuración
No tiene plano de control
CONTRASPROS
Service mesh  abriendo en canal envoy

Más contenido relacionado

Más de Paradigma Digital

Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOParadigma Digital
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsParadigma Digital
 

Más de Paradigma Digital (20)

Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 
Cultura Digital Paradigma
Cultura Digital ParadigmaCultura Digital Paradigma
Cultura Digital Paradigma
 
Introducción a Kubernetes
Introducción a KubernetesIntroducción a Kubernetes
Introducción a Kubernetes
 
Analysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEOAnalysis of Websites as Graphs for SEO
Analysis of Websites as Graphs for SEO
 
Use Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projectsUse Groovy&Grails in your spring boot projects
Use Groovy&Grails in your spring boot projects
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 

Último (12)

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

Service mesh abriendo en canal envoy

  • 1. Service mesh: abriendo en canal Envoy Noviembre 2018
  • 2. Service mesh: abriendo en canal Envoy Sobre nosotros @luismoramedina Luis Mora Medina Arquitecto software @Paradigma Abraham Rodríguez Arquitecto Cloud Native @Paradigma
  • 3. Índice AUTORES Y CONTACTO 1. Repaso a service-mesh 2. Funcionalidades 3. Ejemplo de aplicación 4. Configuración y uso 5. Necesidad de un plano de control 6. Conclusiones Abraham Rodríguez Arquitecto Cloud Native Luis Mora Medina Arquitecto de Software
  • 4. Service mesh: abriendo en canal Envoy 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. Service mesh: abriendo en canal Envoy Repaso a service mesh: patrón proxy-sidecar & plano de control Control plane Patrón proxy-sidecar: ● Acompaña siempre a la aplicación ● Actuando como proxy ● Intercepta y maneja la complejidad de red ● Independiente del lenguaje de implementación Plano de control: ● Coordina el plano de datos para que funcione como un único sistema integrado ● Monitoriza el sistema en su conjunto ● Securiza el sistema en su conjunto Envoy Envoy
  • 7. Service mesh: abriendo en canal Envoy Funcionalidades que cubre Envoy ● Enrutado y balanceo: mirroring de peticiones, diferentes algoritmos de balanceo, reintentos ● Protocolos de comunicación: HTTP1, HTTP2, gRPC ● Service discovery: DNS, consumo de APIs ● Health check: activo y pasivo ● Edge proxy: punto de entrada único al sistema. ● Cambio de configuración en caliente “The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problem.” ● Gestión del fallo: circuit breaking, timeout, limitación de carga. ● Monitorización: recolección de métricas, trazabilidad distribuida ● Integración de métricas con BBDD: MongoDB, DynamoDB ● TLS, JWT validation
  • 8. Service mesh: abriendo en canal Envoy Principales recursos en Envoy Podemos tener varios dentro de una misma instancia de Envoy y pueden tener comportamientos diferentes en base a los filtros que definamos Estadísticas, trazabilidad distribuida, reescritura de cabeceras, logado … Mapea dominios a clusters, enrutado por path, reintentos, gestión de timeout, priorización Algoritmo de balanceo, timeouts, descubrimiento de instancias, gestión del fallo Listeners HttpConnectionManager Http Routing Clusters
  • 10. Service mesh: abriendo en canal Envoy Ejemplo de aplicación
  • 12. 1. Configuración y peticiones 2. Descubrimiento de instancias 3. Ingress 4. Gestión de error a. Timeout b. Circuit breaking c. Outlier detection 5. Trazabilidad distribuida Configuración y uso
  • 14. Service mesh: abriendo en canal Envoy Ejemplos de configuración
  • 15. Service mesh: abriendo en canal Envoy Ejemplos de configuración En qué dirección y puerto va a escuchar dicho listener
  • 16. Service mesh: abriendo en canal Envoy Ejemplos de configuración En qué dirección y puerto va a escuchar dicho listener Configuración del filtro: ● nombrados ● dominios asignados ● mapeo rutas - clusters
  • 17. Service mesh: abriendo en canal Envoy Ejemplos de configuración
  • 18. Service mesh: abriendo en canal Envoy Ejemplos de configuración Configuración del cluster: ● Timeout ● Descubrimiento ● Algoritmo de balanceo
  • 19. Service mesh: abriendo en canal Envoy Ejemplos de configuración Configuración del cluster: ● Timeout ● Descubrimiento ● Algoritmo de balanceo Administración de Envoy ● Logs ● Puerto de Escucha Interfaz de administración
  • 20. Service mesh: abriendo en canal Envoy Llamadas entre microservicios - address: socket_address: address: 0.0.0.0 port_value: 9900 filter_chains: - filters: - name: envoy.http_connection_manager config: codec_type: auto stat_prefix: egress_mesh_http route_config: name: mesh_route virtual_hosts: - name: service_mesh domains: - "*" routes: - match: prefix: "/" route: cluster_header: ":authority" http_filters: - name: envoy.router config: {} Puertos configurados: ● 10000: Entrada ● 9900: Salida ● 8081: Administración
  • 21. Service mesh: abriendo en canal Envoy Llamadas entre microservicios - address: socket_address: address: 0.0.0.0 port_value: 9900 filter_chains: - filters: - name: envoy.http_connection_manager config: codec_type: auto stat_prefix: egress_mesh_http route_config: name: mesh_route virtual_hosts: - name: service_mesh domains: - "*" routes: - match: prefix: "/" route: cluster_header: ":authority" http_filters: - name: envoy.router config: {} Puertos configurados: ● 10000: Entrada ● 9900: Salida ● 8081: Administración
  • 22. Service mesh: abriendo en canal Envoy Llamadas entre microservicios - address: socket_address: address: 0.0.0.0 port_value: 9900 filter_chains: - filters: - name: envoy.http_connection_manager config: codec_type: auto stat_prefix: egress_mesh_http route_config: name: mesh_route virtual_hosts: - name: service_mesh domains: - "*" routes: - match: prefix: "/" route: cluster_header: ":authority" http_filters: - name: envoy.router config: {} Puertos configurados: ● 10000: Entrada ● 9900: Salida ● 8081: Administración El cluster invocado se determina por la cabecera Host, reconvertida a :authority Código de ejemplo
  • 24. Service mesh: abriendo en canal Envoy Descubrimiento de clusters ● Static: definir directamente el listado de instancias ● Strict DNS: cada IP devuelta por el DNS es considerada un host ● Logical DNS: cada vez que se necesita una nueva conexión se utiliza la primera IP devuelta por el DNS ● SDS: API REST invocada periodicamente para resolver las instancias que componen un cluster. 2 versiones ● ... “SDS is the preferred service discovery mechanism for a few reasons ● Envoy has explicit knowledge of each upstream host (vs. routing through a DNS resolved load balancer) and can make more intelligent load balancing decisions. ● Extra attributes carried in the discovery API response for each host inform Envoy of the host’s load balancing weight, canary status, zone …”
  • 25. Service mesh: abriendo en canal Envoy Descubrimiento de clusters ● Static: definir directamente el listado de instancias ● Strict DNS: cada IP devuelta por el DNS es considerada un host ● Logical DNS: cada vez que se necesita una nueva conexión se utiliza la primera IP devuelta por el DNS ● SDS: API REST invocada periodicamente para resolver las instancias que componen un cluster. 2 versiones ● ... “SDS is the preferred service discovery mechanism for a few reasons ● Envoy has explicit knowledge of each upstream host (vs. routing through a DNS resolved load balancer) and can make more intelligent load balancing decisions. ● Extra attributes carried in the discovery API response for each host inform Envoy of the host’s load balancing weight, canary status, zone …” Su implementación ● El microservicio se registra en el servicio de descubrimiento ● El registro de instancias se almacena en DynamoDB
  • 26. Service mesh: abriendo en canal Envoy Descubrimiento de clusters ● Static: definir directamente el listado de instancias ● Strict DNS: cada IP devuelta por el DNS es considerada un host ● Logical DNS: cada vez que se necesita una nueva conexión se utiliza la primera IP devuelta por el DNS ● SDS: API REST invocada periodicamente para resolver las instancias que componen un cluster. 2 versiones ● ... “SDS is the preferred service discovery mechanism for a few reasons ● Envoy has explicit knowledge of each upstream host (vs. routing through a DNS resolved load balancer) and can make more intelligent load balancing decisions. ● Extra attributes carried in the discovery API response for each host inform Envoy of the host’s load balancing weight, canary status, zone …” Su implementación ● El microservicio se registra en el servicio de descubrimiento ● El registro de instancias se almacena en DynamoDB NOT VALID
  • 27. Service mesh: abriendo en canal Envoy Descubrimiento de clusters ● Static: definir directamente el listado de instancias ● Strict DNS: cada IP devuelta por el DNS es considerada un host ● Logical DNS: cada vez que se necesita una nueva conexión se utiliza la primera IP devuelta por el DNS ● SDS: API REST invocada periodicamente para resolver las instancias que componen un cluster. 2 versiones ● ... “SDS is the preferred service discovery mechanism for a few reasons ● Envoy has explicit knowledge of each upstream host (vs. routing through a DNS resolved load balancer) and can make more intelligent load balancing decisions. ● Extra attributes carried in the discovery API response for each host inform Envoy of the host’s load balancing weight, canary status, zone …” Su implementación ● El microservicio se registra en el servicio de descubrimiento ● El registro de instancias se almacena en DynamoDB Nuestra visión ● No queremos delegar a la aplicación la responsabilidad del registro ● No queremos utilizar DynamoDB ● No queremos utilizar los servicios de descubrimiento de Kubernetes - perdemos funcionalidad de Envoy NOT VALID
  • 28. Service mesh: abriendo en canal Envoy Descubrimiento de clusters ● Static: definir directamente el listado de instancias ● Strict DNS: cada IP devuelta por el DNS es considerada un host ● Logical DNS: cada vez que se necesita una nueva conexión se utiliza la primera IP devuelta por el DNS ● SDS: API REST invocada periodicamente para resolver las instancias que componen un cluster. 2 versiones ● ... “SDS is the preferred service discovery mechanism for a few reasons ● Envoy has explicit knowledge of each upstream host (vs. routing through a DNS resolved load balancer) and can make more intelligent load balancing decisions. ● Extra attributes carried in the discovery API response for each host inform Envoy of the host’s load balancing weight, canary status, zone …” Su implementación ● El microservicio se registra en el servicio de descubrimiento ● El registro de instancias se almacena en DynamoDB Nuestra visión ● No queremos delegar a la aplicación la responsabilidad del registro ● No queremos utilizar DynamoDB ● No queremos utilizar los servicios de descubrimiento de Kubernetes - perdemos funcionalidad de Envoy Nuestra solución ● Consultar el API de Kubernetes NOT VALID
  • 29. Service mesh: abriendo en canal Envoy Descubrimiento de clusters: configuración - name: sds connect_timeout: 0.50s type: strict_dns lb_policy: round_robin hosts: - socket_address: address: sds port_value: 80 Cluster de SDS
  • 30. Service mesh: abriendo en canal Envoy Descubrimiento de clusters: configuración - name: pet connect_timeout: 0.50s type: eds lb_policy: round_robin eds_cluster_config: eds_config: api_config_source: api_type: REST_LEGACY cluster_names: sds refresh_delay: 60s - name: sds connect_timeout: 0.50s type: strict_dns lb_policy: round_robin hosts: - socket_address: address: sds port_value: 80 Cluster de SDS Referenciar al SDS
  • 31. Service mesh: abriendo en canal Envoy Descubrimiento de clusters: API v2 Disponible para diferentes protocolos Utilizando Protocol Buffers Nos permite configurar cualquier recurso Cambios de configuración en caliente
  • 33. Service mesh: abriendo en canal Envoy Ingress Envoy can act as an edge reverse proxy An edge server is any server that resides on the “edge” between two networks, typically between a private network and the internet. A reverse proxy server is a type of proxy server that typically sits behind the firewall in a private network and directs client requests to the appropriate backend server. A reverse proxy provides an additional level of abstraction and control to ensure the smooth flow of network traffic between clients and servers.
  • 34. Service mesh: abriendo en canal Envoy Ingress route_config: name: ingress_route virtual_hosts: - name: service domains: - "*" routes: - match: prefix: "/pet/" route: cluster: pet prefix_rewrite: "/" - match: prefix: "/petstore/" route: cluster: petstore prefix_rewrite: "/" Mapeamos el cluster de cada servicio a un path con el mismo nombre Con el prefix_rewrite evitamos el envío del mapeo al servidor
  • 36. Service mesh: abriendo en canal Envoy Gestión de error Control de rating, límite de carga, peticiones concurrentes El circuit breaking de Martin Fowler Retirada de nodos en función de errores 500, errores de gateway, latencias, errores consecutivos, porcentaje de errores, healthy_panic_threshold Timeouts a nivel general, a nivel de ruta Circuit breaking Outlier Detection Gestión de timeout y reintentos
  • 37. Service mesh: abriendo en canal Envoy Gestión de error
  • 38. Service mesh: abriendo en canal Envoy Circuit breaking # in petstore configuration - name: pet connect_timeout: 0.50s type: eds lb_policy: round_robin circuit_breakers: thresholds: - priority: DEFAULT max_pending_requests: 3 max_connections: 5 RATE LIMIT = 5 + 3 SLEEP 2s
  • 39. Service mesh: abriendo en canal Envoy Outlier detection # in ingress configuration outlier_detection: consecutive_5xx: 3 interval: 10s base_ejection_time: 10s max_ejection_percent: 100 common_lb_config: healthy_panic_threshold: value: 0.0 OPEN CIRCUIT ON 3 FAILURES POST /health/{statusCode} GET /health >> statusCode
  • 40. Service mesh: abriendo en canal Envoy Timeouts # in petstore configuration routes: - match: prefix: "/" route: cluster_header: ":authority" timeout: 1s TIMEOUT OF 1s >> 503 SLEEP 2s
  • 41. Service mesh: abriendo en canal Envoy Retries # in ingress configuration routes: - match: prefix: "/" route: cluster_header: ":authority" retry_policy: retry_on: 5xx num_retries: 3 RETRY 3 TIMES IF 5XX POST /health/{statusCode} GET /health >> statusCode
  • 43. filter_chains: - filters: - name: envoy.http_connection_manager config: tracing: operation_name: egress Service mesh: abriendo en canal Envoy Trazabilidad distribuida Configuración del filtro
  • 44. filter_chains: - filters: - name: envoy.http_connection_manager config: tracing: operation_name: egress Service mesh: abriendo en canal Envoy Trazabilidad distribuida con Zipkin - name: zipkin connect_timeout: 1s type: strict_dns lb_policy: round_robin hosts: - socket_address: address: zipkin port_value: 80 tracing: http: name: envoy.zipkin config: collector_cluster: zipkin collector_endpoint: "/api/v1/spans" Definición del cluster de zipkin Configuración de cliente Zipkin Configuración del filtro
  • 45. filter_chains: - filters: - name: envoy.http_connection_manager config: tracing: operation_name: egress Service mesh: abriendo en canal Envoy Trazabilidad distribuida con Jaeger tracing: http: name: envoy.dynamic.ot config: library: .../libjaegertracing_plugin.so config: service_name: petstore sampler: type: const param: 1 reporter: localAgentHostPort: jaeger:6831 Configuración del filtro wget -O .../libjaegertracing_plugin.so https://github.com/jaegertraci ng/.../libjaegertracing_plugin.li nux_amd64.so Instalación del agente de jaeger Configuración del cliente nativo de jaeger
  • 47. Service mesh: abriendo en canal Envoy Seguridad Configuración de certificados local o remota (mediante Secret Discovery Service SDS), terminación y inicio de SSL, autenticación mutua, filtros de ssl Validación de tokens JWT, carga de fichero de claves remoto, fichero local o inline TLS End user authentication Filtro de autorización, Role Based Access Control por ruta RBAC
  • 48. Service mesh: abriendo en canal Envoy Validación de tokens JWT - name: envoy.filters.http.jwt_authn config: providers: jwt_provider: issuer: test local_jwks: inline_string: ...public key... forward: true forward_payload_header: "plain-auth" rules: - match: prefix: / requires: provider_and_audiences: provider_name:jwt_provider audiences: pets.read JWT validation Plain authentication is propagated
  • 49. Necesidad de un plano de control
  • 50. Service mesh: abriendo en canal Envoy Necesidad de plano de control ● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza ● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia
  • 51. Service mesh: abriendo en canal Envoy Necesidad de plano de control TRABAJO ENGORROSO ● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza ● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia
  • 52. Service mesh: abriendo en canal Envoy Necesidad de plano de control ● Hemos tenido que poner diversas configuraciones varias veces, una en cada pieza ● Ninguna pieza no sabe nada de las demás, de hecho podría ni saber de su existencia “The control plane takes a set of isolated stateless sidecar proxies and turns them into a distributed system.” TRABAJO ENGORROSO “Ultimately, the goal of a control plane is to set policy that will eventually be enacted by the data plane. More advanced control planes will abstract more of the system from the operator and require less handholding” Matt Klein, Engineer @lyft
  • 54. Service mesh: abriendo en canal Envoy Conclusiones Proxy muy ligero Gestión avanzada de circuit breaking Integración con múltiples productos Soporte a validación de JWT Carga en caliente “Retroalimentación” funcionalidades istio-envoy Extensible, pero difícil de extender* Necesita de componentes extra para algunas de sus funcionalidades Complejidad de configuración No tiene plano de control CONTRASPROS