UDMI / Docs / Cloud / GCP / Dev Deployment
This document details the architecture, component topology, authentication mechanisms, build/deployment workflows, and verification procedures required for development and production deployments (e.g., bos-platform-dev and bos-platform-prod).
The bos-platform-dev environment in Google Cloud Platform runs on Google Kubernetes Engine (GKE) under the udmis namespace. It replicates the Mosquitto-based architecture used in bos-platform-prod.
flowchart TD
subgraph Device Layer
P[Pubber / Physical Devices]
end
subgraph Reflector Layer
R[Registrar / Validator / Sequencer]
end
subgraph GKE Cluster: main [namespace: udmis]
subgraph Ingress & Broker
AUTH[Auth / Zanzara Proxy<br/>:1883 TCP / :8883 TLS]
MOSQ[Mosquitto Broker<br/>:8883 Internal mTLS / :38883 Dynsec]
end
subgraph Datastore
ETCD[(etcd cluster<br/>https://etcd:2379)]
end
subgraph Bridge StatefulSets
BE[bridge-events]
BS[bridge-state]
BR[bridge-reflect]
BRE[bridge-reflect-events]
end
subgraph Backend Core
UDMIS[udmis-pods Deployment<br/>3 replicas]
end
end
subgraph GCP Pub/Sub
PS_TARGET[Topic: udmi_target<br/>Sub: udmi_target-udmis]
PS_STATE[Topic: udmi_state<br/>Sub: udmi_state-udmis]
PS_REFLECT[Topic: udmi_reflect<br/>Sub: udmi_reflect-udmis]
end
P -->|JWT auth / :1883 or :8883| AUTH
AUTH -->|Validate credentials| ETCD
AUTH -->|Proxy authenticated MQTT| MOSQ
R -->|mTLS / :8883| MOSQ
MOSQ -->|$share/events| BE
MOSQ -->|$share/state| BS
MOSQ -->|/r/UDMI-REFLECT/d/+/reflect| BR
MOSQ -->|/r/UDMI-REFLECT/d/+/events/#| BRE
BE -->|Publish| PS_TARGET
BS -->|Publish| PS_STATE
BR -->|Publish| PS_REFLECT
BRE -->|Publish| PS_REFLECT
PS_TARGET --> UDMIS
PS_STATE --> UDMIS
PS_REFLECT --> UDMIS
UDMIS -->|Device Registry & State| ETCD
UDMIS -->|Dynsec & Admin| MOSQ
| Component | Workload Type | Ports / Protocol | Role & Function |
|---|---|---|---|
| Mosquitto | StatefulSet/mosquitto |
8883 (mTLS)38883 (Dynsec TCP) |
Core MQTT broker. Port 8883 handles internal backend components with client certificate authentication (require_certificate true). Port 38883 provides basic auth dynamic security. |
| Auth (Zanzara) | Deployment/auth |
1883 (TCP)8883 (TLS) |
Device ingress reverse proxy. Intercepts CONNECT requests, authenticates device credentials against etcd, and proxies traffic to Mosquitto port 8883 using internal mTLS certs. |
| etcd | StatefulSet/etcd |
2379, 2380 (mTLS) |
Distributed keystore for device registry configuration, device metadata, key bindings, and state persistence. |
| Bridge | StatefulSet/bridge-* |
Outbound MQTT + Pub/Sub | Bridges MQTT topics ($share/events, $share/state, /r/UDMI-REFLECT/...) to GCP Pub/Sub topics (udmi_target, udmi_state, udmi_reflect). |
| UDMIS Pods | Deployment/udmis-pods |
Pub/Sub Consumers | Main UDMI processing service. Ingests messages from Pub/Sub subscriptions, performs validation, manages device configuration/state, and emits reflector updates. |
registrar, validator, sequencer):
8883 via mTLS.rsa_private.crt), private key (rsa_private.pem / rsa_private.pkcs8), and Root CA certificate (ca.crt) signed by the cluster root authority (available in secret udmis-tls)./r/UDMI-REFLECT/d/<SITE_NAME>/reflect.pubber, physical hardware):
auth (Zanzara) proxy on port 1883 (TCP) or 8883 (TLS).projects/<PROJECT_ID>/locations/<REGION>/registries/<REGISTRY_ID>/devices/<DEVICE_ID>.rsa_private.pkcs8 / ec_private.pkcs8).# 1. Build udmis fat jar
udmis/bin/build
# 2. Build and tag udmis container image
docker build -t us-central1-docker.pkg.dev/bos-platform-artifacts/udmi/udmis:zanzarafix \
-f udmis/Dockerfile.udmis udmis
# 3. Build and tag bridge2 container image
docker build -t us-central1-docker.pkg.dev/bos-platform-artifacts/udmi/bridge2:zanzarafix \
-f - . <<EOF
FROM gcr.io/distroless/java21-debian12
WORKDIR /app
COPY udmis/build/libs/udmis-1.0-SNAPSHOT-all.jar /app/bridge.jar
ENTRYPOINT ["java", "-cp", "/app/bridge.jar", "com.google.bos.udmi.service.bridge.MqttToPubSubBridge"]
EOF