Una serie de publicaciones sobre Istio Service Mesh

Estamos comenzando una serie de publicaciones que demuestran algunas de las muchas características de Istio Service Mesh en combinación con Red Hat OpenShift y Kubernetes.

Una serie de publicaciones sobre Istio Service Mesh

Primera parte hoy:

  • Expliquemos el concepto de contenedores sidecar de Kubernetes y formulemos el leitmotiv de esta serie de publicaciones: "no necesitas cambiar nada en tu código".
  • Imaginemos lo fundamental de Istio: las reglas de enrutamiento. Todas las demás funciones de Istio se basan en ellas, ya que son las reglas las que le permiten dirigir el tráfico a microservicios utilizando archivos YAML externos al código del servicio. También consideramos el esquema de implementación Canary Deployment. Bono de Año Nuevo: 10 lecciones interactivas de Istio


La segunda parte, que saldrá pronto, le dirá:

  • Cómo Istio implementa Pool Eyection junto con Circuit Breaker y demuestra cómo Istio le permite eliminar un módulo inactivo o de bajo rendimiento del esquema de equilibrio.
  • También veremos el tema del disyuntor de la primera publicación sobre cómo se puede usar Istio aquí. Mostraremos cómo enrutar el tráfico y manejar errores de red sin el más mínimo cambio en el código del servicio utilizando archivos de configuración YAML y comandos de terminal.

Parte tres:

  • Una historia sobre seguimiento y monitoreo, que ya están integrados o se agregan fácilmente a Istio. Le mostraremos cómo utilizar herramientas como Prometheus, Jaeger y Grafana en combinación con el escalado de OpenShift para administrar sin esfuerzo arquitecturas de microservicios.
  • Estamos pasando de monitorear y manejar errores a introducirlos en el sistema de manera intencionada. En otras palabras, aprendemos a realizar la inyección de fallas sin cambiar el código fuente, lo cual es muy importante desde el punto de vista de las pruebas, porque si cambia el código en sí para esto, existe el riesgo de introducir errores adicionales.

Finalmente, en la publicación final sobre Istio Service Mesh:

  • Vayamos al Lado Oscuro. Más precisamente, aprenderemos a utilizar el esquema Dark Launch, cuando el código se implementa y prueba directamente en los datos de producción, pero no afecta el funcionamiento del sistema de ninguna manera. Aquí es donde resulta útil la capacidad de Istio para dividir el tráfico. Y la capacidad de realizar pruebas con datos de producción en vivo sin afectar el funcionamiento del sistema de combate de ninguna manera es la forma más convincente de comprobarlo.
  • Sobre la base de Dark Launch, le mostraremos cómo utilizar el modelo Canary Deployment para reducir el riesgo y facilitar la implementación de código nuevo. Canary Deployment en sí no es nuevo, pero Istio le permite implementar este esquema con simples archivos YAML.
  • Finalmente, le mostraremos cómo usar Istio Egress para dar acceso a servicios a quienes están fuera de sus clústeres para poder utilizar las capacidades de Istio cuando trabaje con Internet.

Entonces, nos vamos…

Kit de herramientas de gestión y monitoreo de Istio: todo lo que necesita para coordinar microservicios en una malla de servicios malla de servicio.

¿Qué es la malla de servicio de Istio?

La malla de servicios implementa para un grupo de servicios funciones tales como monitoreo de tráfico, control de acceso, descubrimiento, seguridad, tolerancia a fallas y otras cosas útiles. Istio te permite hacer todo esto sin el más mínimo cambio en el código de los propios servicios. ¿Cuál es el secreto de la magia? Istio adjunta su propio proxy a cada servicio en forma de contenedor sidecar (el sidecar es un sidecar de motocicleta), después de lo cual todo el tráfico a este servicio pasa por el proxy, que, guiado por las políticas especificadas, decide cómo, cuándo y si esto el tráfico debería llegar al servicio. Istio también le brinda la capacidad de implementar técnicas avanzadas de DevOps, como implementaciones canary, disyuntores, inyección de fallas y más.

Cómo funciona Istio con contenedores y Kubernetes

La malla de servicios de Istio es una implementación complementaria de todo lo que necesita para crear y administrar microservicios: monitoreo, rastreo, disyuntores, enrutamiento, equilibrio de carga, inyección de fallas, reintentos, tiempos de espera, duplicación, control de acceso, limitación de velocidad y más. Y aunque hoy en día existen toneladas de bibliotecas para implementar estas funciones directamente en el código, con Istio puedes obtener exactamente lo mismo sin cambiar nada en tu código.

Según el modelo sidecar, Istio se ejecuta en un contenedor de Linux, que se encuentra en uno Kubernetes-pod con un servicio controlado e implementa (inyecta) y extrae (extrae) funcionalidad e información de acuerdo con la configuración dada. Hacemos hincapié en que esta es su propia configuración y se encuentra fuera de su código. Por tanto, el código se vuelve mucho más simple y corto.

Más importante aún, el componente operativo de los microservicios no tiene ninguna relación con el código en sí, lo que significa que su funcionamiento se puede transferir de forma segura a los especialistas de TI. De hecho, ¿por qué un desarrollador debería ser responsable de los disyuntores y la inyección de fallas? Reaccionar, sí, pero ¿procesarlos y crearlos? Si elimina todo esto del código, los programadores pueden centrarse completamente en la funcionalidad de la aplicación. Y el código en sí será más corto y sencillo.

Malla de servicio

Istio, que implementa funciones de gestión de microservicios fuera de su código: este es el concepto de Service Mesh. En otras palabras, es un grupo coordinado de uno o más binarios que forman una cuadrícula de funciones de red.

Cómo funciona Istio con microservicios

Así es como funciona el contenedor sidecar en combinación con Kubernetes и Miniturno Vista panorámica: inicie una instancia de Minishift, cree un proyecto de Istio (llamémoslo "sistema-istio"), instale y ejecute todos los componentes relacionados con Istio. Luego, a medida que crea proyectos y pods, agregue información de configuración a sus implementaciones y sus pods comenzarán a usar Istio. Un diagrama simplificado se ve así:

Una serie de publicaciones sobre Istio Service Mesh

Ahora puede cambiar la configuración de Istio para, por ejemplo, organizar la inyección de fallas, soporte Implementación canaria u otras características de Istio, y todo esto sin tocar el código de las propias aplicaciones. Supongamos que desea redirigir todo el tráfico web de los usuarios de su cliente más importante (Foo Corporation) a una nueva versión de su sitio. Todo lo que necesita hacer es crear una regla de enrutamiento de Istio que busque @foocorporation.com en el ID de usuario y redireccione en consecuencia. Para todos los demás usuarios, nada cambiará. Mientras tanto, probará silenciosamente la nueva versión del sitio. Y tenga en cuenta que no es necesario involucrar a los desarrolladores para esto.

¿Y cuánto tienes que pagar por ello?

De nada. Istio es bastante rápido, está escrito en Go y crea una sobrecarga muy pequeña. Además, una posible pérdida de productividad en línea se compensa con un aumento en la productividad de los desarrolladores. Al menos en teoría: no olvides que el tiempo de los desarrolladores es valioso. En términos de costos de software, Istio es un software de código abierto, por lo que su obtención y uso es gratuito.

Dominalo tu mismo

El equipo de experiencia de desarrolladores de Red Hat ha desarrollado una experiencia práctica en profundidad. руководство por Istio (en inglés). Se ejecuta en Linux, MacOS y Windows y el código está disponible en Java y Node.js.

10 lecciones interactivas de Istio

Bloque 1 - Para principiantes

Introducción a Istio
Minutos 30
Nos familiarizamos con Service Mesh y aprendemos cómo instalar Istio en el clúster Kubernetes OpenShift.
Enviar

Implementación de microservicios en Istio
Minutos 30
Usamos Istio para implementar tres microservicios con Spring Boot y Vert.x.
Enviar

Bloque 2 - nivel intermedio

Monitoreo y seguimiento en Istio
Minutos 60
Explore las herramientas de monitoreo integradas, las métricas personalizadas y OpenTracing de Istio a través de Prometheus y Grafana.
Enviar

Enrutamiento simple en Istio
Minutos 60
Aprenda a controlar el enrutamiento en Istio usando reglas simples.
Enviar

Reglas de enrutamiento avanzadas
Minutos 60
Nos familiarizamos con el enrutamiento inteligente en Istio, el control de acceso, el equilibrio de carga y la limitación de velocidad.
Enviar

Bloque 3 - Usuario Avanzado

Inyección de fallas en Istio
Minutos 60
Estudiamos escenarios de manejo de fallas en aplicaciones distribuidas, creando errores HTTP y retrasos en la red, y aprendemos cómo aplicar ingeniería del caos para restaurar el medio ambiente.
Enviar

Disyuntor en Istio
Minutos 30
Instalar Siege para sitios de pruebas de estrés y aprender a garantizar la tolerancia a fallas del backend mediante reintentos, disyuntores y expulsión del grupo.
Enviar

Salida e Istio
Minutos 10
Utilizamos rutas de salida para crear reglas para la interacción de servicios internos con API y servicios externos.
Enviar

Istio y Kiali
Minutos 15
Aprender a utilizar Kiali para obtener una visión general de la red de servicios y estudiar el flujo de solicitudes y datos.
Enviar

TLS mutuo en Istio
Minutos 15
Creamos Istio Gateway y VirtualService, luego estudiamos TLS mutuo (mTLS) y su configuración en detalle.
Enviar

Cuadro 3.1 - Análisis profundo: Istio Service Mesh para microservicios

Una serie de publicaciones sobre Istio Service Mesh
Sobre que es el libro:

  • ¿Qué es una malla de servicios?
  • El sistema Istio y su papel en la arquitectura de microservicios.
  • Usar Istio para las siguientes tareas:
    • Tolerancia a fallos;
    • Enrutamiento;
    • Pruebas de caos;
    • Seguridad;
    • Recopilación de telemetría mediante rastreo, métricas y Grafana.

Para descargar un libro

Serie de artículos sobre mallas de servicios e Istio.

Inténtalo tú mismo

Esta serie de publicaciones no pretende proporcionar una inmersión profunda en el mundo de Istio. Solo queremos presentarle el concepto en sí y tal vez inspirarlo a probar Istio usted mismo. Es completamente gratuito y Red Hat proporciona todas las herramientas que necesita para comenzar con OpenShift, Kubernetes, contenedores de Linux e Istio, incluidas: Desarrollador de Red Hat OpenShift Container Platform, nuestra guía de Istio y otros recursos en nuestro micrositio de malla de servicio. ¡No se demore, comience hoy!

Reglas de enrutamiento de Istio: dirigir las solicitudes de servicio a donde deben ir

OpenShift и Kubernetes son excelentes para tratar microservicios enrutado a los pods requeridos. Este es uno de los propósitos de la existencia de Kubernetes: enrutamiento y equilibrio de carga. Pero ¿qué pasa si necesita un enrutamiento más sutil y sofisticado? Por ejemplo, para utilizar dos versiones de un microservicio al mismo tiempo. ¿Cómo pueden ayudar aquí las reglas de ruta de Istio?

Las reglas de enrutamiento son las reglas que, de hecho, especifican la elección de la ruta. Independientemente de la complejidad del sistema, el principio general detrás de estas reglas sigue siendo simple: las solicitudes se enrutan en función de ciertos parámetros y valores de encabezado HTTP.
Veamos ejemplos:

Valor predeterminado de Kubernetes: trivial "50/50"

En nuestro ejemplo, mostraremos cómo usar dos versiones de un microservicio en OpenShift al mismo tiempo, llamémoslas v1 y v2. Cada versión se ejecuta en su propio pod de Kubernetes y el enrutamiento por turnos equilibrado equitativamente funciona aquí de forma predeterminada. Cada pod recibe su parte de solicitudes según la cantidad de instancias de microservicio, en otras palabras, réplicas. Istio le permite cambiar este saldo manualmente.

Digamos que implementamos dos versiones de nuestro servicio de recomendación, recomendación-v1 y recomendación-v2, en OpenShift.
En la fig. La Figura 1 muestra que cuando cada servicio se representa en una sola instancia, las solicitudes se entrelazan uniformemente entre ellos: 1-2-1-2-… Así es como funciona el enrutamiento de Kubernetes de forma predeterminada:

Una serie de publicaciones sobre Istio Service Mesh

Distribución ponderada entre versiones

En la fig. La Figura 2 muestra lo que sucede si aumenta la cantidad de réplicas del servicio v2 de una a dos (esto se hace con el comando oc scale —replicas=2 development/recommendation-v2). Como puede ver, las solicitudes entre v1 y v2 ahora se dividen en una proporción de uno a tres: 1-2-2-1-2-2-…:

Una serie de publicaciones sobre Istio Service Mesh

Ignorar la versión con Istio

Istio facilita cambiar la distribución de solicitudes de la forma que necesitemos. Por ejemplo, envíe todo el tráfico solo a la recomendación-v1 utilizando el siguiente archivo yaml de Istio:

Una serie de publicaciones sobre Istio Service Mesh

Aquí debes prestar atención a esto: las vainas se seleccionan según las etiquetas. En nuestro ejemplo, se utiliza la etiqueta v1. El parámetro "peso: 100" significa que el 100 % del tráfico se enrutará a todos los pods del servicio que tengan la etiqueta v1.

Distribución de directivas entre versiones (Canary Deployment)

Además, utilizando el parámetro de peso, puede dirigir el tráfico a ambos pods, ignorando la cantidad de instancias de microservicio que se ejecutan en cada uno de ellos. Por ejemplo, aquí dirigimos directivamente el 90% del tráfico a v1 y el 10% a v2:

Una serie de publicaciones sobre Istio Service Mesh

Enrutamiento independiente para usuarios móviles

En conclusión, mostraremos cómo forzar que el tráfico de los usuarios móviles se enrute al servicio v2 y a todos los demás usuarios al servicio v1. Para hacer esto, usamos expresiones regulares para analizar el valor del agente de usuario en el encabezado de la solicitud:

Una serie de publicaciones sobre Istio Service Mesh

Ahora es tu turno

El ejemplo de expresiones regulares para analizar encabezados debería motivarlo a explorar sus propias formas de aplicar las reglas de enrutamiento de Istio. Además, las posibilidades aquí son muy amplias, ya que los valores del encabezado se pueden formar en el código fuente de las aplicaciones.

Y recuerda que Ops, no Dev

Todo lo que mostramos en los ejemplos anteriores se hace sin el más mínimo cambio en el código fuente, excepto en aquellos casos en los que es necesario formar encabezados de solicitud especiales. Istio será útil tanto para los desarrolladores, que, por ejemplo, podrán utilizarlo en la fase de prueba, como para los operadores de sistemas informáticos, a quienes ayudará enormemente en la producción.

Así que repitamos la nota clave de esta serie de publicaciones: no necesitas cambiar nada en tu código. No es necesario crear nuevas imágenes ni ejecutar nuevos contenedores. Todo esto se implementa fuera del código.

Use su imaginación

Imagínese las posibilidades del análisis de encabezados utilizando expresiones regulares. ¿Quiere redirigir a su cliente más importante a una versión especial de su microservicios? ¡Fácilmente! ¿Necesita una versión independiente para el navegador Chrome? ¡Ningún problema! Podrás encaminar el tráfico según casi cualquiera de sus características.

Inténtalo tú mismo

Leer sobre Istio, Kubernetes y OpenShift es una cosa, pero ¿por qué no tocarlo todo usted mismo? Equipo Programa para desarrolladores de Red Hat preparó una guía detallada (en inglés) que le ayudará a dominar estas tecnologías lo más rápido posible. La guía también es 100% de código abierto, por lo que es de dominio público. El archivo funciona en macOS, Linux y Windows, y el código fuente está disponible en versiones Java y node.js (próximamente habrá más idiomas). Simplemente abra el repositorio git apropiado en su navegador Demostración para desarrolladores de Red Hat.

En la próxima publicación: resolviendo problemas maravillosamente

Hoy viste lo que pueden hacer las reglas de enrutamiento de Istio. Ahora imaginemos lo mismo, pero sólo en relación con el manejo de errores. Esto es exactamente lo que cubriremos en la próxima publicación.

Fuente: habr.com

Añadir un comentario