Skip to content

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                       │  │   │
│  │  └────────────────────────────────────────────────────────────────┘  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘