Desplegando ms-modules: Agrupando la Funcionalidad del Ecosistema
Con nuestros servicios base y de catálogos ya en funcionamiento, damos el siguiente paso lógico en la construcción de nuestra plataforma: definir las agrupaciones funcionales de nuestra aplicación. Para esta tarea, desplegaremos ms-modules
.
El propósito de ms-modules
es simple pero poderoso: nos permite crear Módulos y asociar a ellos los servicios (y sus endpoints) que han sido descubiertos y registrados por ms-services
. Por ejemplo, podríamos crear un módulo “Gestión de Autenticación” y asociarle los servicios de ms-users
, ms-roles
y ms-rbac
. Esta agrupación es la base sobre la que construiremos más adelante nuestro sistema de licenciamiento y control de acceso.
Un Vistazo a la Arquitectura de ms-modules
Section titled “Un Vistazo a la Arquitectura de ms-modules”La arquitectura interna de ms-modules
sigue fielmente nuestro arquetipo base, garantizando consistencia y calidad.
Flujo de la API a los Casos de Uso (CQRS)
Section titled “Flujo de la API a los Casos de Uso (CQRS)”Este diagrama muestra cómo las peticiones REST se traducen en acciones dentro del microservicio.
- Peticiones REST: La API expone endpoints para gestionar
Module
y para añadir o quitar servicios de un módulo existente. - Casos de Uso: La lógica de negocio está separada en Commands (para crear, actualizar, eliminar, añadir/quitar servicios) y Queries (para leer la información de los módulos). Cada
Command
exitoso emite unDomain Event
para notificar al resto del sistema.
El Modelo de Dominio
Section titled “El Modelo de Dominio”La lógica de negocio está encapsulada en el ModuleAggregate
.
El Agregado ModuleAggregate
no solo contiene la información básica del módulo, sino que también gestiona una lista de ServiceEntity
. Esto asegura que la relación entre un módulo y sus servicios se mantenga siempre consistente y cumpla con las reglas de negocio.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-modules
necesita las mismas credenciales base que nuestros otros servicios para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-modules `"RabbitMQ:UserName=<USERNAME_FROM_RABBITMQ_SECRET>" `"RabbitMQ:Password=<PASSWORD_FROM_RABBITMQ_SECRET>" `"Redis:Instances:Core:ConnectionString=<CONNECTION_STRING_FROM_REDIS>" `"Mongo:ConnectionString=<VAULT_TRANSIT_PASSWORD>"Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.
-
Desplegando con Helm desde ArtifactHub
ms-modules
solo expone una API REST, por lo que desplegaremos un único Helm Chart.-
Preparar el
values-rest.yaml
Local Creamos un archivovalues-rest.yaml
con la configuración de las variables de entorno no sensibles y la conexión a Vault.# values-rest.yaml para ms-modules-restms-base:env:- name: RESOURCES__ENABLEvalue: "true"- name: RESOURCES__SERVERvalue: "http://ms-services-grpc.inventory.svc.cluster.local:5001"- name: SECURITY__VALIDISSUERvalue: "https://devcodedesignplus.ciamlogin.com/dfee7752-2c8a-4171-ad95-62ddc82d6ed8/v2.0/"- name: SECURITY__CLIENTIDvalue: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: SECURITY__VALIDAUDIENCES__0value: "305f759d-d1d2-467b-9eab-4a61389c7329"- name: RABBITMQ__HOSTvalue: "rabbitmq-cluster.srv-rabbitmq.svc"- name: LOGGER__OTELENDPOINTvalue: "http://inventory-opentelemetry-collector.otel-inventory.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-inventory.svc.cluster.local:4317"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%FvirtualService:create: truenamespace: istio-ingresshosts:- services.codedesignplus.appgateways:- istio-ingress/istio-inventory-gatewayhttp:- name: ms-modulesmatch:- uri:prefix: /ms-modules/rewrite:uri: /route:- destination:host: ms-modules-rest.inventory.svc.cluster.localport:number: 5000 -
Ejecutar el Despliegue con Helm Usamos
helm upgrade --install
para desplegar el chart en el namespaceinventory
.Terminal window helm upgrade --install ms-modules-rest codedesignplus/ms-modules-rest -f ./values-rest.yaml --namespace inventory
-
Parte 3: Verificación del Despliegue
Section titled “Parte 3: Verificación del Despliegue”-
Verificar el Pod en Lens En Lens, bajo “Workloads > Pods”, ahora vemos nuestro nuevo pod
ms-modules-rest
corriendo en el namespaceinventory
. -
Verificar el
VirtualService
de Istio El Helm chart ha creado automáticamente elVirtualService
que enruta el tráfico desde nuestro Gateway. En Lens, bajo “Custom Resources > VirtualService”, podemos ver la nueva regla params-modules
. -
Probar el Acceso a la API
-
Endpoint de Salud: Verificamos que el servicio está vivo accediendo a su endpoint de salud:
https://services.codedesignplus.app/ms-modules/health/ready
Deberías ver una respuesta “Healthy”.
-
Swagger UI: Para explorar la API de forma interactiva, usamos la interfaz de Swagger UI:
https://services.codedesignplus.app/ms-modules/index.html
Aquí puedes ver todos los endpoints disponibles para gestionar Módulos y los Servicios asociados a ellos.
-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-modules
, un microservicio clave para la organización y estructuración de la funcionalidad de tu aplicación. Siguiendo nuestro patrón de despliegue, hemos añadido otra pieza a nuestro ecosistema de una manera rápida y estandarizada.
Con la capacidad de agrupar servicios en módulos, estamos un paso más cerca de poder implementar lógicas de negocio más complejas, como la gestión de licencias y el control de acceso a nivel de módulo, temas que abordaremos en los próximos artículos.