Al finalizar el tutorial el estudiante estará en capacidad de:
En particular se utilizarán los siguientes recursos:
Para los siguientes pasos se recomienda trabajar con un ambiente sin contenedores en ejecución. Para ello puede destruir los despliegues y los servicios haciendo uso del comando delete:
kubectl delete all --all -n default kubectl delete ingress <gateway-name>
Para este tutorial manejaremos el repositorio de calculadora-numeros usado en los tutoriales pasados, en caso de no tenerlo clonado aún, puede consultarlo en el siguiente enlace. Trabajaremos sobre la rama feature/service-discovery, para ello cambie la rama del repositorio actual al respectivo hash del tag, para hacerlo ejecute en su terminal:
user@192 ~ % git checkout feature/service-discovery
Si ya se encuentra en este tag, haga caso omiso al comando presentado anteriormente.
Nuestro servicio exponencial hace uso del servicio de multiplicación para aprovechar sus características y calcular la exponencial de una base con respecto a su exponente.
Para poder comunicarnos con otro servicio (Multiplicación) necesitamos desplegar la imagen del microservicio de cálculo exponencial. Revise el archivo view.py de la carpeta exponential. Si se fija en las líneas 10 y 21 consumimos el microservicio de multiplicación mediante una solicitud POST, enviando los dos números requeridos en el body; la URL es pasada por la variable de entorno llamada multiplicacion_url al momento de desplegar los servicios del cluster.
Para crear la imagen y poderla asociar en el archivo de despliegue de kubernetes, ponga en práctica lo aprendido en el tutorial de creación de imagen y cree una nueva imagen a partir del microservicio de cálculo exponencial el cual encontrará en la carpeta exponential. Una vez creada la imagen publíquela en el artifact registry, luego de hacer el push podrá ver lo siguiente en la consola de GCP:
Una vez creada la imagen podemos declararla en el archivo de despliegue del cluster. Abra el archivo k8s-deployments.yml y actualice las líneas 22, 79, 135 con las URI de sus imágenes.
Como pudimos observar en el código previamente, el microservicio exponencial necesita comunicarse con el microservicio multiplicación, y la URL es pasada al microservicio por medio de una variable de entorno. Por lo tanto, indicaremos por medio de una variable de entorno en el archivo de despliegue, la url con el nombre asignado al servicio (recuerde que es el mismo que declaró en la metadata del archivo):
spec: containers: - name: exponencial image: <image-uri> ports: - containerPort: 4000 env: ... - name: <NOMBRE VARIABLE ASOCIADA A LA URL> value: http://<NOMBRE SERVICIO DECLARADO>
El valor de la variable no puede ser un valor estático como una dirección IP, este debe ser una llave que permita a Kubernetes descubrir cuál servicio responde a una petición, sin importar el nodo donde se ejecute. Por lo tanto, el valor debe ser el nombre del servicio con el que se quiere comunicar precedido del protocolo a usar (http://)
env: - name: MULTIPLICACION_MS value: http://servicio-multiplicacion
Ahora verifique que el servicio de exponencial está registrado en el ingress.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gateway-ingress labels: name: gateway-ingress spec: rules: - http: paths: ... - pathType: Prefix path: /exponencial backend: service: name: servicio-exponencial port: number: 80
Ahora ejecute los cambios en su ambiente ejecutando el comando:
user@192 ~ % kubectl apply -f k8s-deployments.yml
Luego de unos minutos podrá ver en su consola el check verde del despliegue. Si va a la pestaña del despliegue podrá ver la dirección IP asociada al ingress creado.
En el caso del ejemplo corresponde a 35.190.90.190. Para probar que el despliegue está funcionando, identifique su IP externa y reemplácela en el siguiente curl asociado al microservicio exponencial:
user@192 ~ % curl --location --request POST 'http://<IP-BALANCEADOR>/exponencial' \ --header 'Content-Type: application/json' \ --data-raw '{ "numero": 2, "potencia": 2 }'
Para el caso del ejemplo, el endpoint de cálculo exponencial corresponde a:
user@192 ~ % curl --location --request POST 'http://35.190.90.190/exponencial' \ --header 'Content-Type: application/json' \ --data-raw '{ "numero": 2, "potencia": 2 }'
Obteniendo el resultado:
{ "message": "Elevando 2 a la 2 se obtiene 4, "result": 4 }
Como puede evidenciar, el microservicio exponencial hace uso del microservicio de multiplicación declarado en el archivo de despliegue. En este caso la comunicación es haciendo uso del descubrimiento de servicios, aprovechando el dns interno del cluster de kubernetes, y no a través del ingress.
¡Éxitos en el desarrollo del tutorial y nos vemos en una próxima oportunidad!
[1] 23, J. and Wickramasinghe, S. (2021) Kubernetes Ingress explained, BMC Blogs. Available at: https://www.bmc.com/blogs/kubernetes-ingress/ (Accessed: December 2, 2022).
[2]Kubernetes Ingress Goes Ga (no date) Google Open Source Blog. Available at: https://opensource.googleblog.com/2020/09/kubernetes-ingress-goes-ga.html (Accessed: December 2, 2022).