跳到主要内容

架构概览

KubeVision 采用清晰的分层架构,并支持实时数据流。

系统架构图

                    Browser (React + shadcn/ui)
┌────────┴────────┐
REST WebSocket
│ │
┌───────────▼─────────────────▼──────────────┐
│ KubeVision Backend (Go + Gin) │
│ │
│ Middleware: RequestID → Logger → Auth │
│ → RBAC → Audit │
│ │
│ Handler ──→ Service ──→ K8sRepo │
│ (params) (logic) (cache+fallback) │
│ │ │
│ ┌──────────┴──────────┐ │
│ │ │ │
│ Informer Cache API Server │
│ │ │
│ Informer Watch ──→ EventListener │
│ │ │
│ WS Hub ──→ Browser │
│ │
│ Plugins: Prometheus │ Grafana │ ArgoCD │
│ DB: SQLite (dev) / PostgreSQL (prod) │
└─────────────────────────────────────────────┘

设计原则

#原则说明
1简单优先尽量使用标准库,减少第三方依赖
2渐进式增强先实现 MVP 核心功能,高级特性以插件方式接入
3泛型资源单一 Handler 加注册表覆盖所有 K8s 资源
4实时反馈Informer 缓存 + WebSocket,更新延迟低于一秒
5接口驱动所有依赖通过接口注入
6默认安全敏感信息脱敏、审计默认开启、最小权限原则

各层说明

Handler 层

HTTP 请求入口。负责解析参数、校验输入,并将请求委托给 Service 层。单一泛型 ResourceHandler 处理所有 Kubernetes 资源类型的增删改查。

Service 层

业务逻辑层:输入校验、错误映射、缓存策略。ResourceService 提供统一的增删改查接口,读取时优先命中缓存,未命中则回退到 API Server。

Repository 层

数据访问抽象层。K8sRepo 封装 Informer 缓存与动态客户端;UserRepoClusterRepo 等封装 GORM 以操作数据库。

Middleware 栈

请求依次经过:RequestID → Logger → Auth (JWT) → RBAC → Audit

每个 Middleware 均可独立组合,并按路由粒度灵活挂载。

核心接口

type K8sResourceRepo interface {
List(ctx, cluster, ns, resource) (items, stale, error)
Get(ctx, cluster, ns, resource, name) (*Unstructured, error)
Create(ctx, cluster, ns, resource, obj) (*Unstructured, error)
Update(ctx, cluster, ns, resource, name, obj) (*Unstructured, error)
Delete(ctx, cluster, ns, resource, name) error
DryRun(ctx, cluster, ns, resource, name, obj) (*Unstructured, error)
}

type ClusterManager interface {
DynamicClient(cluster string) (dynamic.Interface, error)
RESTConfig(cluster string) (*rest.Config, error)
}

type ResourceRegistry interface {
Get(name string) (*ResourceInfo, error)
All() []ResourceInfo
}