Skip to main content

Cloud Architecture on GCP

High-level cloud architecture for deploying the BigHammer platform on Google Kubernetes Engine (GKE) using the platform umbrella Helm chart.

This document describes components and data flows in a cloud-agnostic, environment-neutral way. Replace placeholders such as <project-id>, <your-domain>, and <env> with values from your deployment.

Architecture overview

Deployment layers

LayerResponsibility
GCP foundationGKE, Cloud SQL, Secret Manager, Cloud DNS, GCS, Artifact Registry
Orchestration & analyticsCloud Composer (Airflow), Dataproc on VM, Vertex AI
Cluster add-onsESO, ingress-nginx or Envoy Gateway + bh-gateway, RabbitMQ
Platform chartAPIs, UI, workers, Keycloak, HTTPRoutes / Ingress
EdgeNGINX Ingress or Gateway API (bh-gateway)

Orchestration & ML connections

FromToPurpose
GKE (bhaiagent)Vertex AILLM inference and embeddings for AI Agent workloads
Cloud ComposerDataproc (VM)Airflow DAGs submit Spark / batch jobs
Dataproc (VM)Secret ManagerJob credentials and runtime secrets
Dataproc (VM)GCSInput/output data, staging, event logs
Dataproc (VM)Artifact RegistrySpark container images and job dependencies

Reference Terraform modules may define Composer and Dataproc resources; the Composer service account typically includes roles/dataproc.editor for job submission.

Data flow

Platform chart components

Sub-chartRole
bhui, bhadminuiWeb UIs
bhcatalogapi, bhauditapi, bhaiagent, bhkeycloakapiAPIs
bhcatalogworker, bhauditworker, bhaiagentworker, bhcelerybeatCelery workers
bhkeycloakIdentity (SSO)
bhtransformationutilsTransformation API

Deploy separately: ESO, edge controller, RabbitMQ, Redis (optional).

Authentication model

ComponentAuth method
External Secrets OperatorGKE Workload Identity → external-secrets-operator@<project>.iam.gserviceaccount.com
Application podsWorkload Identity → shared app GSA (<your-app-gsa>)
Cloud SQLPrivate IP + client certs; postgresSSLMode: require in chart values
Image pullGAR reader on node SA, or imagePullSecrets

Hostnames (example: <env> = dev)

Configured under global.ingress.*HostName in values-<env>.yaml:

HostExample
UIui.<env>.<your-domain>
Catalogcatalog.<env>.<your-domain>
Auditaudit.<env>.<your-domain>
Keycloakkc.<env>.<your-domain>
Keycloak APIkcapi.<env>.<your-domain>
AI Agentaiagent.<env>.<your-domain>
Admin UIadminui.<env>.<your-domain>

DNS A records point to the ingress / Gateway load balancer IP.