Mala de servicio de Kubernetes

Mala de servicio de Kubernetes
Kubernetes tiene muchos tipos de recursos que lo ayudan a abstraer la idea de servicios o microservicios. Por ejemplo, si el frontend de su aplicación quiere interactuar con el backend, no es necesario que le importe qué POD está buscando, o ni siquiera qué dirección IP espera que una cápsula de backend ocupe. Las vainas están expuestas a través de un servicio. (Si eres nuevo en Kubernetes, te recomiendo esta publicación para comprender mejor qué los pods son junto con otros conceptos importantes.)

Esencialmente, Kubernetes expone un servicio de back -end internamente dentro del clúster y el front-end interactúa con este servicio. Las vainas que ofrecen el servicio pueden reemplazarse y nadie notaría nada. Pero a medida que crecen las características en sus aplicaciones, la cantidad de servicios que necesita mantener también crece. Cada servicio puede hablar potencialmente con cualquier otro servicio en el clúster, y la red resultante se denomina Malla de servicio.

Hay muchos complementos para que Kubernetes nos ayude a simplificar la gestión de esta malla de servicio. Se ofrecen muchas características de claves como TLS, equilibrio de carga automatizado, asegurando API incluso en la red interna, etc. Muchas opciones como Istio, Linkerd y el conducto pueden integrarse con Kubernetes para lograr esto. Estaremos investigando a Istio en esta publicación ya que es la versión 1.0 fue anunciado recientemente.

Requisitos previos

Para comenzar con Istio, necesitaría un clúster de Kubernetes en funcionamiento. Hay tres formas de conseguir eso.

  1. Puede instalar minikube para crear un solo clúster de nodo en su máquina local.
  2. O, si está utilizando Docker en Windows o Mac, puede habilitar un clúster de Kubernetes de un solo nodo en la configuración de Docker.
  3. O puede usar servicios en línea como Katacoda Playground. Estaremos usando esto.

¿Por qué utilizar una malla de servicio??

Instalar una malla de servicio, como Istio, facilita trabajar con microservicios. Mientras se desarrolla, no tiene que preocuparse por el hecho de que su microservicio tendría que ofrecer soporte para TLS mutuo, equilibrio de carga o cualquier otro aspecto, como el descubrimiento de servicios. Una malla de servicio ideal le permite conectar microservicios, asegurarlos unos de otros y del mundo exterior, y administrarlos de manera organizada. Ayuda tanto a los desarrolladores como a los operadores.

Instalación de istio

La instalación de Istio requiere tener un clúster Kubernetes. Si tiene un solo clúster de nodo como obtiene con Minikube o Docker en el escritorio, todos los comandos se pueden ejecutar en su nodo local. Sin embargo, si está utilizando un clúster de nodos múltiples como el que ofrece Katacoda Playground, tenga en cuenta que la mayoría de los comandos y los procedimientos de configuración se realizan en el nodo maestro. Sí, afecta a todo el clúster, pero necesitamos interactuar únicamente con el nodo maestro.

Comenzamos con clonación (o descargando) el último lanzamiento de Istio de Github. Los usuarios de Windows pueden querer visitar esta página y obtener lo apropiado .cremallera archivo.

$ curl -l https: // git.io/getLatestistio | mierda -
$ CD istio-1.0.0

El nombre del repositorio puede cambiar con el tiempo a medida que aparece el lanzamiento más nuevo, en el momento de este escrito 1.0.0 es el último lanzamiento estable. Este repositorio contiene no solo la extensión de la malla de servicio sino también una aplicación de muestra llamada BookInfo para fines de experimentación. El script también agrega el nuevo directorio $ pwd/istio-1.0.0/bin a tu ruta variable.

Este directorio contiene istioctl binario que se puede usar para interactuar con el clúster. Los usuarios de Windows simplemente pueden llamar al binario yendo a la carpeta istio-1.0.0 \ bin y llamar .\ istioctl Uso de PowerShell o solicitante del sistema. Pero es un complemento opcional.

Si está usando Mac, puede hacerlo usando el siguiente comando:

$ exportación ruta = $ pwd/bin: $ ruta

A continuación, necesitamos extender nuestra API de Kubernetes con definiciones de recursos personalizados (CRD) que Istio nos proporciona.

$ Kubectl Aplicar -f Install/Kubernetes/Helm/Istio/Templates/CRDS.yaml

Esto podría entrar en vigencia en unos segundos y una vez que se realice, su Kube-APISERVER tendrá extensiones de Istio integradas en él. De aquí en adelante, las opciones de instalación varían según si está utilizando esto para fines de producción o si está experimentando con él en su propio entorno aislado.

Asumiremos que este último es el caso e instala istio sin autenticación TLS.

$ kubectl aplicar -f instalación/kubernetes/istio -demo.yaml

Esto creará un nuevo espacio de nombres en el sistema istio.

Implementación de la aplicación e inyector istio

Aquí viene la utilidad de istio. Istio agrega proxies sidEcar a sus servicios, y esto se hace sin modificar el código real de su aplicación. Si está habilitado el inyector automático istio-sidecar. Puede etiquetar un espacio de nombres con istio-inyection = habilitado y cuando su aplicación esté implementada en este espacio de nombres, las cápsulas mismas tendrán contenedores de envío especializados junto con los contenedores para la aplicación central. Por ejemplo, etiquetemos el espacio de nombres predeterminado

$ kubectl espacio de nombres de etiqueta predeterminado istio-inyection = habilitado

Ahora implementemos la aplicación BookInfo de muestra en este espacio de nombres. Del directorio raíz del representante de Isitio que clonamos, ejecute:

$ kubectl aplicar -f muestras/bookinfo/plataforma/kube/bookinfo.yaml

Puede enumerar todas las vainas que se ejecutan aquí:

$ kubectl consigue vainas

Elija cualquier vaina de los que. Por ejemplo, una de las cápsulas de la aplicación BookInfo en mi implementación se llama Detalles-V1-6865B9B99D-6MXX9

$ Kubectl Describa pods/Detsily-V1-6865B9B99D-6MXX9

En la descripción, notará que la cápsula contiene dos contenedores, primero es un componente de la ejecución real de la aplicación de la imagen.8.0 y el segundo es el istio-proxy ejecutando la imagen GCR.io/istio-release/proxyv2: 1.0.0 .

Istio ofrece un control de grano fino sobre su malla de servicio porque inyecta estos contenedores a las cápsulas donde residen sus aplicaciones. Esto combinado con TLS fácil de usar para la comunicación y el control de tráfico de grano fino es una de las muchas razones por las cuales las grandes aplicaciones pueden beneficiarse de una malla de servicio como Istio.

Referencias

La arquitectura real tiene muchos componentes como piloto, ciudadela y mezclador cada uno con su propio papel importante que realizar. Puede aprender mucho más sobre estos componentes aquí e intentar implementar su propio microservicio aquí.