WaaS: Kubernetes-нативный удалённый рабочий стол

WaaS — это open-source решение класса «рабочее пространство как услуга» (Workspace-as-a-Service), нативное для Kubernetes. Достаточно выполнить helm install на любом кластере (единственная зависимость — cert-manager), и пользователи получают полноценный удалённый рабочий стол — Linux (VNC) или Windows (RDP через KubeVirt, определяется автоматически) — доступный из любого браузера. Инструкции по установке и обновлению см. в helm/waas/README.md.

Рабочие пространства как код, GitOps в первую очередь: рабочее пространство — это ресурс Kubernetes (Workspace / WorkspaceTemplate CRD), создаваемый через kubectl apply, ArgoCD или Flux, как и всё остальное в кластере.

Архитектура

Browser ── HTTPS/WSS ──> API Server (chi) ──> PostgreSQL (users, quotas, sessions, audit)
                              │
                              ├──> Kubernetes API ──> Operator ──> Pod (Linux, VNC) / VM via KubeVirt (Windows, RDP)
                              │
                              └──> WebSocket Proxy (wwt) ──validates JWT first──> guacd (ClusterIP only) ──> pod/VM
Компонент Путь Роль

Operator

operator/

Приводит CRD Workspace/WorkspaceTemplate к нужному состоянию: создаёт поды и PVC (Linux) или виртуальные машины KubeVirt (Windows). Работает только через Kubernetes API — к базе данных не обращается.

API Server

api-server/

REST API, аутентификация (локальная + OIDC), RBAC, бизнес-логика. Создаёт CRD через Kubernetes API — поды напрямую не создаёт никогда.

WebSocket Proxy

wwt/

Проверяет JWT до того, как открывает TCP-соединение с guacd.

Frontend

frontend/

Административная панель и пользовательский портал на React 19. Общается исключительно с API Server.

Shared

shared/

JWT-claims и примитивы аутентификации, общие для API Server и прокси.

Helm chart

helm/waas/

Единая чарт-установка: оператор, API-сервер, прокси, frontend, guacd, PostgreSQL — см. helm/waas/README.md.

Жёсткие границы (не обсуждаются):

  • Operator: только Kubernetes API, никакого доступа к БД.

  • API Server: не создаёт поды и виртуальные машины напрямую — только через CRD.

  • Frontend: не обращается к Kubernetes API напрямую.

  • guacd: только ClusterIP, никогда не выставляется за пределы кластера; прокси проверяет JWT перед подключением.

  • Журналы аудита (audit logs) — только для дозаписи, без изменений.

Быстрый старт (локальная разработка)

mise install            # все зафиксированные инструменты (Go, Node, Helm, …) — именно те версии, что ставит CI
make build check        # сборка всех Go-модулей + все локальные CI-проверки (Go и frontend)
make generate manifests # кодогенерация оператора (CRD, RBAC, deepcopy)
make frontend-build

# Запустить API-сервер против SQLite (только для разработки) без кластера:
cd api-server && WAAS_DEV=true go run ./cmd/api-server

Локальный кластер (k3d): make dev-bootstrap — создаёт кластер waas-dev с cert-manager, собирает и импортирует образы сервисов, разворачивает чарт и наполняет каталог тестовыми данными; URL и учётные данные выводятся в конце. Образы рабочих столов берутся из опубликованного реестра, так что репозиторий waas-workspace-images не нужен — он требуется только при итерациях с LOCAL_IMAGES="<variant>…" в качестве соседнего каталога (путь можно переопределить переменной WAAS_WORKSPACE_IMAGES_DIR). После изменений в коде: make dev-reload (сервисы/frontend) или make dev-reload-all (также пересобирает LOCAL_IMAGES). make dev-down сносит окружение, make smoke проверяет реальные сессии по каждому протоколу.

CI/CD

Пайплайн GitHub Actions (.github/workflows/ci.yml): выборочные сборки по компонентам на пул-реквестах, нативная сборка образов для amd64/arm64 с объединением в мульти-архитектурные манифест-листы, блокирующие проверки безопасности (gitleaks, Trivy), а также релизы по принципу продвижения — тег vX.Y.Z в Git перетегирует и подписывает через cosign те самые дайджесты, которые уже прошли проверку и сканирование в зелёном пайплайне main. ArgoCD разворачивает по git-тегу (путь helm/waas). Схема пайплайна, процедура релиза, очистка реестра и отладка — в docs/ci-github.md.

Участие в разработке

См. CONTRIBUTING.md — настройка окружения, проверки перед созданием PR, соглашения по коммитам. Агентам для написания кода с помощью ИИ: начните с AGENTS.md.

Лицензия

Apache-2.0 — community edition, бесплатно навсегда.

© 2026 meganuke