2.6 KiB
2.6 KiB
Architecture Overview
High-Level Flow
Client (Postman/Mobile)
│ HTTPS (queue.workolik.com via Traefik 443)
▼
Traefik (TLS terminate, Host rule: queue.workolik.com)
│ HTTP to k3s LB (port 8201)
▼
k3s LoadBalancer (klipper-lb) : fastapi-lb
│ ClusterIP Service fastapi-backend:8000
▼
FastAPI Pods (4→20 via HPA)
│ Publish to NATS (JetStream)
▼
External NATS (nats.workolik.com:4222) – Stream: EVENTS / Subject: api.>
│ Worker subscription (worker_consumer)
▼
Worker Pods (2→10 via HPA)
│ Forward with original HTTP method
▼
External API (https://jupiter.nearle.app)
Components
-
Ingress / Edge
- DNS:
queue.workolik.com→ server IP - Traefik: terminates TLS, routes Host=queue.workolik.com → LB 8201
- k3s LoadBalancer (klipper-lb): Service
fastapi-lbon 8201 (HTTP)
- DNS:
-
App Layer
- FastAPI Deployment: 4 replicas (HPA 4–20), probes on
/healthand/ready - FastAPI Service:
fastapi-backendClusterIP on 8000 - Endpoints publish to NATS with method metadata
- FastAPI Deployment: 4 replicas (HPA 4–20), probes on
-
Messaging
- NATS JetStream (external): Stream
EVENTS, Subjectapi.>, Consumerworker_consumer
- NATS JetStream (external): Stream
-
Workers
- Worker Deployment: 2 replicas (HPA 2–10), probes on
/metrics(9090) - Forwards to
https://jupiter.nearle.appwith the same HTTP method (PUT for updatedelivery, POST for others)
- Worker Deployment: 2 replicas (HPA 2–10), probes on
-
Autoscaling & Health
- Metrics-server running; HPAs on FastAPI and Worker
- Liveness/Readiness probes ensure pod health
API Surface (FastAPI → Worker → External)
- PUT
/live/api/v1/deliveries/updatedelivery→ PUT to Nearle - POST
/live/api/v2/partners/createriderlog→ POST to Nearle - POST
/live/api/v2/deliveries/createdeliverylog→ POST to Nearle - POST
/live/api/v2/partners/createbreaklog→ POST to Nearle - POST
/live/api/v2/partners/updatebreaklog→ POST to Nearle
Key Ports
- External TLS: 443 (Traefik)
- LB HTTP into k3s: 8201 (klipper-lb → FastAPI Service 8000)
- FastAPI container: 8000
- Worker metrics: 9090
- NATS: 4222 (external)
Files of Interest
manifests/fastapi-deployment.yaml,manifests/worker-deployment.yamlmanifests/fastapi-loadbalancer.yaml(klipper-lb)Dockerfile(multi-target: api, worker)docker-compose.yml(Traefik labels for HTTPS)scripts/app.py,scripts/worker.py,scripts/setup_jetstream.py
Notes
- TLS is terminated at Traefik; traffic to k3s is HTTP on 8201.
- Keep external exposure through Traefik Host rule to reduce scanner noise.
- HPAs rely on metrics-server; already running and feeding FastAPI/Worker HPAs.