En el artículo anterior – Instalando Kubernetes sin morir en el intento – vimos como instalar Kubernetes utilizando máquinas virtuales con VirtualBox, ahora veremos la instalación de Istio en nuestro clúster.
Arquitectura Istio Service Mesh
Para dar una explicación más gráfica acerca de Istio, presentaré la siguiente arquitectura.
Descarga del instalador
Debemos ir al sitio de istio.io y descargar el archivo de instalación dependiendo de nuestro sistema operativo.
Otra forma de descargar el instalador es ejecutando el comando
curl -L https://istio.io/downloadIstio | sh -
Instalación de istioctl y variable de entorno
Una vez descargado debemos descomprimir el archivo según sea nuestro sistema operativo y luego debemos agregar la ruta del directorio a nuestra variable PATH, en mi caso tengo MacBook y mostraré cómo y dónde se agrega la ruta.
Esta linea debemos agregarla en mi caso al archivo .zshrc (Oh My ZSH), con ello nuestro PATH ya sabe dónde está Istio.
Si ya tenemos todo listo, deberemos ejecutar istioctl para saber si tenemos el cliente de Istio correctamente instalado.
Si tenemos el resultado de la imagen, significa que tenemos correctamente configurado el cliente de Istio.
En mi caso tengo configurado mi equipo para acceder al clúster, esto lo pueden hacer con el siguiente artículo.
Chequeando la instalación
Una vez configurado todo lo anterior debemos ejecutar un pre-check de Istio antes de instalar en nuestro clúster.
istioctl x precheck
Deberíamos tener el siguiente resultado.
Instalando Istio en Kubernetes
Estamos listos para proceder a instalar Istio en nuestro clúster.
istioctl install
Istio se ha instalado correctamente y para comprobar debemos hacer lo siguiente
Hemos finalizado la primera parte de la instalación de Istio ServiceMesh.
Desplegando Microservicios
Ahora vamos a desplegar microservicios en nuestro clúster y para ello vamos a utilizar un proyecto que se aloja en el repositorio de Google Cloud Platform.
Podemos clonar el repositorio (desde aquí) y una vez realizado vamos al directorio release.
Tomaremos el archivo kubernetes-manifest.yaml para desplegar los microservicios y ejecutaremos el siguiente comando en nuestra terminal.
kubectl apply -f kubernetes-manifest.yaml
Veremos el siguiente resultado.
Si revisamos como se crean los pods, tenemos el siguiente resultado.
kubectl get pods -o wide
Este es el resultado de los pods que se han desplegado.
kubectl get pods
Istio Inyección de Envoy Proxy
Ahora debemos tener muy claro que cada microservicio tiene su contenedor dentro de su pod, tenemos el core de Istio instalado y corriendo en el clúster. Ahora se inyectara un proxy por cada contenedor que tenemos con un microservicio desplegado.
Comenzamos creando un label en nuestro namespace default
$ kubectl label namespace default istio-injection=enabled
$ namespace/default labeled
Comprobamos…
$ kubectl get ns default --show-labels
Ahora para que la inyección del proxy envoy tenga efectos, debemos eliminar nuestros pods y para ello debemos ejecutar el comando.
kubectl delete -f kubernetes-manifest.yaml
Ya tenemos todos los recursos eliminados en el clúster.
Ahora volvemos a crear nuestro despliegue y podemos ver que tenemos dos contenedores por cada microservicio. Esto se realizó sin modificar nada en la configuración de Kubernetes, solamente agregamos un label al namespace.
Si nos fijamos, en color rojo he destacado que ahora tenemos inyectados dos contenedores por cada pod.
Ya tenemos todo correctamente desplegado. Ahora podemos hacer lo siguiente para revisar internamente como se ha construido uno de nuestros pods.
kubectl describe pods adservice-5c85cb4558-xzjzx
Hasta este punto hemos finalizado la instalación de Istio Envoy Proxy.
Aquí tenemos otra forma de revisar nuestro cluster a partir de un IDE de desarrollo, en este caso IntelliJ de Jetbrains. He usado el plugin Cloud Code.
Visualización y métricas
Para obtener información desde nuestros microservicios, podemos utilizar herramientas que nos brindan esos datos telemétricos. Para ello debemos buscar en el mismo directorio desde el cual instalamos el cliente de Istio, un directorio llamado samples y dentro de este buscamos addons.
Como podemos ver mediante estos archivos, tenemos la posibilidad de instalar estos habilitadores con el fin de obtener métricas e información sobre nuestras aplicaciones. Esto también lo pueden encontrar en el sitio de Istio. Aquí 😉
Instalando Complementos
Ejecutamos lo siguiente dependiendo de las rutas de sus computadores
kubectl apply -f istio-1.9.3/samples/addons
Una vez finalizada la creación de estos complementos debemos ejecutar lo siguiente
kubectl get pods -n istio-system
Ahora revisemos los servicios en el namespace istio-system
kubectl get svc -n istio-system
Para poder acceder a uno de los servicios expuestos debemos ejecutar un comando port-forward.
kubectl port-forward svc/kiali -n istio-system 20001
Ahora podemos abrir un navegador e ingresamos la dirección 127.0.0.1:20001 y podremos visualizar la interfaz gráfica de Kiali.
También podemos hacer lo mismo para grafana.
kubectl port-forward svc/grafana -n istio-system 3000
En este caso debemos abrir la UI de grafana en 127.0.0.1:3000
Es todo por ahora, espero que les guste y nos leemos en el próximo artículo.
Como siempre un gran abrazo y cuídense.