Malla de servicio para microservicios. Parte II, los fundamentos de trabajar con Istio

Se preparó una traducción del artículo específicamente para estudiantes del curso de la Plataforma de Infraestructura Basada en Kubernetes .



Configurar un microservicio básico en Kubernetes es engañosamente simple. En un artículo reciente, hablamos sobre lo fácil que es comenzar a trabajar con contenedores. Armamos una imagen simple de Docker, la implementamos usando Kubernetes y ejecutamos la solicitud de la aplicación. No fue difícil, pero en la vida, las arquitecturas en la nube suelen ser más complicadas. Incluyen docenas e incluso cientos de servicios con bases de datos, autenticación y otros elementos que son necesarios en la realidad.


Administrarlos a veces es un dolor de cabeza continuo. En este artículo, hablaremos sobre Istio, una herramienta para la malla de servicios (vimos esta arquitectura anteriormente ) que lleva la administración de grandes implementaciones de nube al siguiente nivel.


Los microservicios le brindan una gran escalabilidad, y la malla de servicios los complementa con los beneficios de centralización típicos de los entornos monolíticos (como registros y control de versiones). Escribimos más sobre las características y beneficios de la malla de servicio en un artículo anterior de esta serie.


La misma publicación se centra en las capacidades de Istio para implementar un patrón de arquitectura en la nube utilizando redes de malla. Aprenderemos cómo configurar el plano de control, considerar las fortalezas de Istio y, finalmente, tomar el servicio Kubernetes con el que trabajamos la última vez, agregarle un proxy sidecar y asociarlo con el plano de control recién creado.


Presentamos el plano de datos y el proxy de sidecar


Los dos términos arquitectónicos principales en Istio son el plano de datos y el plano de control. El plano de datos funciona con datos que se mueven en la aplicación, se transfieren a varias instancias de servicio y se procesan por los propios servicios. Para su implementación, se utilizan principalmente proxies sidecar. A nivel de gestión, se determina el orden de instanciación del servicio, la ubicación de los datos de telemetría y la información del servicio. Los elementos principales del plano de control incluyen Pilot y Mixer. Veamos cómo funciona todo.


El proxy de sidecar se ejecuta junto con el hogar que define su servicio en Kubernetes. Se agrega a los componentes principales del servicio y funciona con el tráfico que va a este servicio. Puede agregar un proxy sidecar a la definición de servicio existente en el hogar: solo las líneas que definen el proxy sidecar se agregarán al servicio y comenzará a funcionar.



A cambio, obtendrá una lista de los beneficios que subyacen a la red de malla en la nube Istio. El proxy de sidecar intercepta el tráfico que ingresa al servicio y permite el enrutamiento inteligente. Estamos hablando de tareas simples, como el equilibrio de carga o el manejo de interrupciones TLS, que aceleran significativamente el trabajo y procesos más complejos, como el control de versiones, la implementación por fases de una nueva versión de un servicio y la recopilación de indicadores de utilización de recursos. Sidecar-proxy le permite agregar todas estas características a la arquitectura existente de microservicios sin reorganizar todo el sistema .


A medida que el propósito inicial del proxy de sidecar se vuelve claro, los beneficios de Istio y el servicio de la nube se combinan en su conjunto. De hecho, todas las arquitecturas de proxy sidecar en conjunto, que funcionan como elementos de conexión unificados entre los pods de servicio, pasan a través de todo el tráfico que pasa a través de la aplicación. Esto significa que, si es necesario, para fortalecer la protección, actúan como una única ubicación donde puede agregar procesos de autenticación y el protocolo HTTPS entre servicios, mantener un registro de eventos para verificar anomalías e implementar herramientas de control de tráfico y filtrado para la autenticación.


Además, dado que los proxies sidecar actúan como puntos finales centrales para la comunicación entre servicios, aumentan la resistencia de la aplicación y agregan un nivel adicional de escalabilidad. Uno de los inconvenientes de los microservicios es que todos los pods del servidor están aislados, y si algo está mal con el microservicio, las solicitudes pueden procesarse lentamente o restablecerse por completo. Gracias a los proxies de sidecar, puede agregar tiempos de espera de forma centralizada, configurar el equilibrio de carga inteligente y ampliar las capacidades de monitoreo.


Centralización: el plano de control


Además del plano de datos, Istio incluye un plano de control. Desempeña el papel de un controlador para todos los proxies de sidecar ejecutados en la aplicación, y un repositorio central para toda la información (como registros e información de versión), que los servicios en la red perciben como una fuente única de datos confiables.



Al trabajar con Istio, Kubernetes es la forma principal de interactuar con el plano de control. Después de instalar los paquetes de Istio y agregar definiciones, puede usar los comandos kubectl que controlan el estado del sistema para acceder al plano de control. Por ejemplo, el proceso de actualizar un hogar a una nueva versión usando kubectl comienza con la actualización de las variables del plano de control local.


Esto es más fácil de ver usando el comando get-svc como parte de kubectl : obtendrá una lista de servicios relacionados con una biblioteca en particular. Para verificar qué componentes de Istio se están ejecutando, puede usar el siguiente comando:


 kubectl get svc -n istio-system 

Se muestra una lista de los principales elementos del plano de control Istio que se ejecutan en segundo plano. Es posible que ya esté familiarizado con algunos de ellos, como Citadel, un servicio que administra la protección del tráfico entre servicios.


Instalar Istio


Veamos qué características admite Istio de forma predeterminada. Instalaremos el plano de control Istio para administrar la API HTTP básica que se describió en el artículo anterior. Este servicio API se definió en Kubernetes y se implementó como uno solo en Kubernetes con una API ejecutándose en él.


Para instalar Istio, siga los pasos en la guía oficial rápida. Comience descargando la última versión de Istio desde la página correspondiente. El programa aún se está desarrollando activamente, por lo que funciona mejor con sus últimos lanzamientos. Simplemente descargue el archivo y asegúrese de que esté disponible en el directorio correcto.


Luego agregue las definiciones de Istio a Kubernetes para que pueda usarlas con la kubectl línea de comandos kubectl . Agregue los archivos .yaml obtenidos .yaml al directorio de instalación utilizando el kubectl apply :


 kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml 

Luego active la instalación de Istio eligiendo un método de autenticación. Usaré la autenticación HTTPS mutua predeterminada, que es excelente para demostraciones y para comenzar. Para agregar una malla de servicio a un proyecto existente, debe descubrir algunas opciones más disponibles. En esta etapa, puede ejecutar el siguiente comando:


 kubectl apply -f install/kubernetes/istio-demo-auth.yaml 

Después de eso puedes continuar. Deberá agregar la estructura Istio a los pods que se crearon anteriormente, y para los nuevos pods, agregue Istio como una dependencia.


Despliegue de aplicaciones de Helloworld


Utilizaremos la aplicación de prueba helloworld, que se describe en nuestra publicación anterior. Se creará: una implementación, un servicio, una puerta de enlace y un servicio virtual. Actualice el archivo de configuración para que coincida con lo siguiente:


helloworld.yaml


 apiVersion: v1 kind: Service metadata: name: helloworld spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 spec: replicas: 1 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld version: v1 spec: containers: - name: helloworld-kubernetes - image: haseebm/helloworld-kubernetes ports: - containerPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: helloworld-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: helloworld spec: hosts: - "*" gateways: - helloworld-gateway http: route: - destination: host: helloworld port: number: 80 

Proxy manual de sidecar Istio


Istio utiliza la muestra de proxy de sidecar para colocar el contenedor de proxy de sidecar de Istio en un hogar con el contenedor de la aplicación helloworld.


 $ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml) service/helloworld created deployment.extensions/helloworld-v1 created gateway.networking.istio.io/helloworld-gateway created virtualservice.networking.istio.io/helloworld created 

Compruebe que se realizan los pods y el servicio:


 $ kubectl get pod,svc | grep helloworld pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running service/helloworld ClusterIP 10.160.58.61 

Ahora verifique el tráfico para la aplicación helloworld:


 $ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello 

Hola mundo v1


Próximos pasos


Istio es una excelente manera de conocer las redes de malla de tecnología en la nube y la administración inteligente de microservicios en general. Como ya hemos escrito más de una vez, los microservicios administrados adecuadamente tienen muchas ventajas técnicas, incluso en términos de escala. Sin embargo, para obtener estos beneficios, debe utilizar las tecnologías existentes de manera efectiva.


En el futuro, veremos otros escenarios para usar Istio y redes de malla en la nube para mejorar la seguridad y la capacidad de administración de nuestra arquitectura de prueba. Por lo tanto, el próximo artículo se centrará en la gestión de implementación y las actualizaciones de versión en Istio para distribuir de manera eficiente las actualizaciones de código sin interrupciones o daños a las implementaciones.


Asad Faizi
Fundador y CEO, CloudPlex.io, Inc
asad@cloudplex.io
www.cloudplex.io

Source: https://habr.com/ru/post/477434/


All Articles