Cloud Services

Refactored cloud microservices from project-ai.

Structure

cloud-services/
├── pkg/                    # Shared Go packages
│   ├── kafka/              # Pure Go Kafka client (franz-go)
│   ├── redis/              # Redis connection pool
│   ├── dbc/                # CAN database signal definitions
│   ├── can-go/             # CAN protocol library
│   └── ...                 # Other shared modules
├── services/
│   └── gateway/            # API gateway service
│       └── Dockerfile      # Service-specific Dockerfile
├── deploy/
│   ├── base/               # Base k8s manifests (configMapGenerator)
│   │   ├── kustomization.yaml
│   │   └── config.env      # Common environment config
│   └── overlays/
│       └── development/    # Dev environment overlay
│           ├── kustomization.yaml
│           ├── secrets.yaml
│           └── services/
│               └── gateway/
│                   ├── deployment.yaml
│                   ├── ingress.yaml
│                   └── external-secret.yaml
├── argocd-apps/
│   └── development/
│       └── cloud-services.yaml  # ArgoCD Application
└── scripts/                # Build and utility scripts

Quick Start

# Build all
go build ./...

# Build gateway
go build ./services/gateway

# Run tests
go test ./...

# Build Docker image (arm64 for Mac Mini cluster)
docker build --platform linux/arm64 -t localhost:32000/gateway:latest -f services/gateway/Dockerfile .

Services

Gateway

WebSocket gateway for TRex, HMI, and Mobile connections. Handles auth, message routing to Kafka.

  • Port 8077: HTTP/WebSocket
  • Port 11011: Health check

Development

Prerequisites

  • Go 1.25+
  • Docker (for container builds)
  • devbox (optional, for consistent dev environment)

Module Structure

Uses Go workspaces (go.work) for local development:

  • ./pkg - shared packages
  • ./pkg/can-go - CAN protocol library
  • ./services/gateway - gateway service

Generating DBC Code

CAN signal definitions are generated from DBC files. See pkg/dbc/README.md.

./scripts/generate-dbc.sh /path/to/dbc/files

Deployment

Kustomize Structure

Uses configMapGenerator with hash suffixes for automatic rolling updates when config changes:

# Preview what will be deployed
kustomize build deploy/overlays/development

# Apply directly (without ArgoCD)
kustomize build deploy/overlays/development | kubectl apply -f -

ArgoCD

The argocd-apps/development/cloud-services.yaml Application points to deploy/overlays/development and auto-syncs changes from git.

Secrets

Database credentials are managed via ExternalSecrets from Vault:

  • cloud-db-credentials - DB_PASSWORD, MONGO_USER, MONGO_PASSWORD

Environment Variables

Configured in deploy/base/config.env:

Variable Default Description
DB_HOST cloud-dev-rw.cnpg-system.svc.cluster.local PostgreSQL host
KAFKA_HOSTS cloud-dev-kafka-bootstrap.kafka.svc.cluster.local:9092 Kafka brokers
REDIS_HOST cloud-dev.redis.svc.cluster.local Redis host
REDIS_PORT 6379 Redis port
MONGO_HOST cloud-dev-svc.mongodb.svc.cluster.local MongoDB host
OIDC_ISSUER Keycloak URL OIDC issuer for JWT validation
LOG_LEVEL info Log level
Description
Go microservices for vehicle cloud platform
Readme 11 MiB
Languages
Go 99.5%
Dockerfile 0.2%
Makefile 0.2%
Shell 0.1%