Desplegando ms-users: El Perfil Central del Ecosistema
Hasta ahora, hemos gestionado conceptos abstractos como roles, permisos e inquilinos. Ahora, desplegaremos el microservicio que les da un rostro humano: ms-users
. Este componente es el corazón de la gestión de perfiles de nuestra aplicación.
Mientras que Microsoft Entra ID se encarga de la identidad (autenticación), ms-users
se encarga del perfil de usuario dentro de nuestro dominio de negocio. Almacena información rica y específica de la aplicación, como su información de contacto, puesto de trabajo, foto de perfil y, lo más importante, a qué Tenants
y Roles
está asociado.
Un Vistazo a la Arquitectura de ms-users
Section titled “Un Vistazo a la Arquitectura de ms-users”ms-users
es un servicio multifacético que utiliza los tres tipos de entrypoints para cumplir con sus diversas responsabilidades.
Flujo de la API a los Casos de Uso (CQRS)
Section titled “Flujo de la API a los Casos de Uso (CQRS)”- REST: Expone una API de gestión muy completa para operaciones CRUD sobre los usuarios y sus entidades relacionadas (asignar/remover tenants, roles, etc.).
- gRPC: Ofrece endpoints de alto rendimiento para que otros servicios internos interactúen con los usuarios (ej.
AddGroupToUser
). - Async Worker: Su única y crucial tarea es escuchar el evento
UserCreated
proveniente dems-microsoft-graph
y replicar el usuario en su propia base de datos.
El Modelo de Dominio
Section titled “El Modelo de Dominio”El UserAggregate
es el agregado central que encapsula toda la complejidad de un perfil de usuario.
Como podemos ver, el Agregado gestiona no solo los datos básicos del usuario, sino también sus relaciones con TenantEntity
, ContactInfo
, JobInfo
, y UserPicture
, asegurando la consistencia de todas estas partes como una sola unidad transaccional.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-users
necesita las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-users `"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 los Entrypoints con Helm Desplegaremos los tres Helm Charts para
ms-users
en el namespaceinventory
.-
Preparar los Archivos
values.yaml
Necesitaremos tres archivos:values-rest.yaml
,values-grpc.yaml
yvalues-worker.yaml
. La estructura es la misma que hemos usado en los microservicios anteriores, definiendo las variables de entorno no sensibles y la conexión a Vault.values-rest.yaml ms-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-collector.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-collector.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-usersmatch:- uri:prefix: /ms-users/rewrite:uri: /route:- destination:host: ms-users-rest.inventory.svc.cluster.localport:number: 5000values-grpc.yaml ms-base:env:- name: RESOURCES__ENABLEvalue: "false"- 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-collector.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%Fvalues-worker.yaml ms-base:env:- name: RESOURCES__ENABLEvalue: "false"- 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-collector.svc.cluster.local:4317"- name: OBSERVABILITY__SERVEROTELvalue: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"vault:server: http://vault.vault.svc.cluster.local:8200solution: inventorytoken: ANGq0*B2acD1n5%F -
Ejecutar el Despliegue con Helm Instalamos los tres charts.
Terminal window # Desplegar el entrypoint RESThelm upgrade --install ms-users-rest codedesignplus/ms-users-rest -f ./values-rest.yaml --namespace inventory# Desplegar el entrypoint gRPChelm upgrade --install ms-users-grpc codedesignplus/ms-users-grpc -f ./values-grpc.yaml --namespace inventory# Desplegar el entrypoint Async Workerhelm upgrade --install ms-users-worker codedesignplus/ms-users-worker -f ./values-worker.yaml --namespace inventory
-
Parte 3: Verificación del Despliegue
Section titled “Parte 3: Verificación del Despliegue”-
Verificar los Pods en Lens En Lens, bajo “Workloads > Pods”, ahora vemos los tres nuevos pods para
ms-users-rest
,ms-users-grpc
yms-users-worker
, todos corriendo en el namespaceinventory
. -
Verificar el
VirtualService
de Istio El Helm chart dems-users-rest
ha creado automáticamente elVirtualService
que enruta el tráfico desde nuestro Gateway. -
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-users/health/ready
Deberías ver una respuesta “Healthy”.
-
Swagger UI: Para explorar la API de gestión, usamos la interfaz de Swagger UI:
https://services.codedesignplus.app/ms-users/index.html
Aquí puedes ver la extensa API para gestionar usuarios, asignarles roles, tenants, y actualizar toda su información de perfil.
-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-users
, el microservicio que actúa como el nexo central de la interacción del usuario con la aplicación. Hemos visto cómo su arquitectura de múltiples entrypoints le permite manejar tareas de gestión (REST), comunicación interna de alto rendimiento (gRPC) y procesamiento asíncrono de eventos (Worker).
Con ms-users
en su lugar, ahora tenemos la capacidad de asociar a los usuarios con los Tenants
y Roles
que hemos definido anteriormente, completando el núcleo de nuestro sistema de identidad y acceso.