Arquitectura
July 16, 2020 · View on GitHub
English | Español
Arquitectura

Runtime
Esta aplicación web de referencia utiliza un frontend estático en Angular alojado en Google Cloud Storage. El frontend realiza llamadas API autenticadas a los servicios de Cloud Run ejecutados en un clúster de GKE. Cloud Firestore es usado para la persistencia de los datos de dicha aplicación.
Redes

Para cada solicitud entrante, el tráfico se dirige al depósito GCS estático o al ingreso del clúster GKE mediante un mapa de URL.
Por defecto, todas las solicitudes se dirigen al depósito GCS a menos
que comience la ruta de solicitud /api, en cuyo caso se dirigen al clúster de GKE.
Un proxy HTTPS de destino asegura el tráfico entrante mediante SSL. Un certificado SSL asociado con el dominio deseado se proporciona o se genera automáticamente.
Una regla de reenvío proporciona la dirección IP de acceso público para las solicitudes entrantes. La dirección IP de la regla de reenvío se agrega a una zona DNS administrada para el dominio asignado.
Autenticación & Autorización

La autenticación es provista por Identity Platform, que emite un JSON Web Token (JWT) en el frontend que se transfiere en solicitudes posteriores y se valida por Istio ingress.
Políticas de autorización de Istio habilitan el control de acceso para garantizar que ciertas operaciones solo sean accesibles para ciertos usuarios. Concretamente, hay políticas para asegurar que:
- El acceso sea denegado a usuarios sin token
- Todos los roles estén autorizados a emitir solicitudes
GETal punto final/api - Los trabajadores estén autorizados para crear transacciones de inventario.
- Los administradores estén autorizados para todas las operaciones, incluida la creación y eliminación de artículos, ubicaciones, etc.
Compilación e Infrastructura

La compilación y configuración es realizad por Cloud Build.
La infraestructura está principalmente orquestada por Cloud Config Connector; la configuración de infraestructura declarativa se puede encontrar en infrastructure-tpl.yaml, backend-service-template.jq, y dns-tpl.yaml.
Generación de API
Tanto el cliente front-end Typecript como el servidor back-end Golang se generan a partir de la OpenAPI spec. De esta manera, los cambios en la superficie de la API son recogidos automáticamente por el cliente y el servidor en la próxima compilación.