Desplegando ms-roles: El Corazón del Control de Acceso
Continuando con el despliegue de nuestro ecosistema, llegamos a un componente fundamental para la seguridad y la autorización: ms-roles. Este microservicio tiene una responsabilidad única y crítica: gestionar la creación, actualización y eliminación de los Roles dentro de nuestra aplicación.
Un “Rol” define un conjunto de permisos (ej. “Administrador”, “Editor”, “Lector”). ms-roles actúa como la fuente de verdad para estos roles, asegurando que estén definidos de manera consistente en toda la plataforma.
Un Vistazo a la Arquitectura de ms-roles
Section titled “Un Vistazo a la Arquitectura de ms-roles”Fiel a nuestro arquetipo, ms-roles sigue una arquitectura limpia y predecible.
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 internas.
- Peticiones REST: La API expone endpoints CRUD estándar para gestionar la entidad
Role. - Casos de Uso: La lógica está separada en Commands (operaciones de escritura que emiten eventos como
RoleCreated) y Queries (operaciones de solo lectura).
El Modelo de Dominio
Section titled “El Modelo de Dominio”La lógica de negocio está encapsulada en el RoleAggregate.
El Agregado RoleAggregate contiene las propiedades de un rol (como Name y Description) y los métodos que garantizan la consistencia y validan las reglas de negocio en cada operación.
Despliegue y Configuración Paso a Paso
Section titled “Despliegue y Configuración Paso a Paso”-
Configurando los Secretos en Vault
ms-rolesnecesita las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.Terminal window vault kv put -mount=inventory-keyvalue ms-roles `"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-rolessolo expone una API REST, por lo que desplegaremos un único Helm Chart.-
Preparar el
values-rest.yamlLocal Creamos un archivovalues-rest.yamlcon la configuración de las variables de entorno no sensibles y la conexión a Vault.# values-rest.yaml para ms-roles-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-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-gatewayhttp:- name: ms-rolesmatch:- uri:prefix: /ms-roles/rewrite:uri: /route:- destination:host: ms-roles-rest.inventory.svc.cluster.localport:number: 5000 -
Ejecutar el Despliegue con Helm Usamos
helm upgrade --installpara desplegar el chart en el namespaceinventory.Terminal window helm upgrade --install ms-roles-rest codedesignplus/ms-roles-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-roles-restcorriendo en el namespaceinventory.
-
Verificar el
VirtualServicede Istio El Helm chart ha creado automáticamente elVirtualServiceque enruta el tráfico desde nuestro Gateway. En Lens, bajo “Custom Resources > VirtualService”, podemos ver la nueva regla params-roles-rest.
-
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-roles/health/readyDeberí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-roles/index.htmlAquí puedes ver todos los endpoints disponibles para gestionar los Roles del sistema.

-
Conclusión
Section titled “Conclusión”Has desplegado con éxito ms-roles, sentando una de las bases más importantes para la seguridad y autorización de tu aplicación. Este microservicio no solo gestiona los roles, sino que también demuestra el poder de una arquitectura orientada a eventos al integrarse de forma asíncrona con otros componentes del ecosistema como ms-microsoft-graph.
Cada microservicio que añadimos enriquece la funcionalidad global de la plataforma. En el próximo artículo, continuaremos construyendo sobre esta base, desplegando el microservicio que consumirá estos roles para aplicar permisos: ms-rbac.