Web-Based Terminal - High-Level Architecture¶
┌─────────────────────────────────────────────────────────────────────────────┐
│ CONTROL PLANE │
│ │
│ ┌──────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ ArgoCD UI │◄────►│ ArgoCD Server │◄────►│ PRINCIPAL │ │
│ │ (Browser) │ WS │ (proxy) │ HTTPS│ │ │
│ │ │ │ │ │ ┌───────────────────┐ │ │
│ │ Terminal │ │ │ │ │ Session Manager │ │ │
│ │ Display │ │ │ │ │ - Upgrade to WS │ │ │
│ │ │ │ │ │ │ - Bridge WS ↔ gRPC│ │ │
│ └──────────────┘ └─────────────────┘ │ └───────────────────┘ │ │
│ │ ▲ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌───────────────────┐ │ │
│ │ │ gRPC Stream │ │ │
│ │ │ Service │ │ │
│ │ └─────────┬─────────┘ │ │
│ └────────────┼────────────┘ │
└──────────────────────────────────────────────────────────────┼──────────────┘
│
gRPC Bidirectional │
Streaming ▼
▲
┌──────────────────────────────────────────────────────────────┼──────────────┐
│ MANAGED CLUSTER │ │
│ │ │
│ ┌───────────────────────────────────────────────────────────┼────────────┐ │
│ │ AGENT │ │ │
│ │ │ │ │
│ │ ┌───────────────────────────────────────────────────┐ │ │ │
│ │ │ Terminal Handler │◄───┘ │ │
│ │ │ - Receive terminal request │ │ │
│ │ │ - Connect to gRPC stream │ │ │
│ │ │ - Bridge gRPC ↔ K8s exec │ │ │
│ │ └───────────────────────┬───────────────────────────┘ │ │
│ │ │ │ │
│ └──────────────────────────┼─────────────────────────────────────────────┘ │
│ │ │
│ K8s Exec API ▼ │
│ (WebSocket) ▲ │
│ │ │
│ ┌──────────────────────────┼───────────────────────────────────────────┐ │
│ │ APPLICATION POD │ │
│ │ ┌───────────────────────┼────────────────────────────────────────┐ │ │
│ │ │ Shell (/bin/bash or /bin/sh) │ │ │
│ │ │ stdin ────────────────► execute command │ │ │
│ │ │ stdout/stderr ◄──────── return output │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘