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 |
|
Приводит CRD |
API Server |
|
REST API, аутентификация (локальная + OIDC), RBAC, бизнес-логика. Создаёт CRD через Kubernetes API — поды напрямую не создаёт никогда. |
WebSocket Proxy |
|
Проверяет JWT до того, как открывает TCP-соединение с guacd. |
Frontend |
|
Административная панель и пользовательский портал на React 19. Общается исключительно с API Server. |
Shared |
|
JWT-claims и примитивы аутентификации, общие для API Server и прокси. |
Helm chart |
|
Единая чарт-установка: оператор, 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, бесплатно навсегда.