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-roles
necesita 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-roles
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-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-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-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 --install
para 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-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-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/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-roles/index.html
Aquí 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
.