跳到主要内容

数据流

AI 运维链路

页面上下文 + 用户问题


AI Chat Handler ──→ OpenAI 兼容提供商
▲ │
│ 工具请求
│ ▼
流式结果 ← Authorizer → Kubernetes/日志/Prometheus

是否为修改?

暂停并等待批准

重新授权 → 执行 → 审计
  1. 浏览器发送当前集群、命名空间、页面、资源和对话历史。
  2. 提供商只能请求 KubeVision 已注册的工具。
  3. 服务端根据工具和参数检查当前用户的 RBAC 权限。
  4. 读取工具通过授权后立即执行,并返回有长度限制的结果。
  5. 修改请求不会立即执行,而是创建一个短期、归属于当前用户的待确认操作。
  6. 用户确认后会消费该操作、重新检查权限、仅执行一次,并记录审计结果。

Agent 循环次数和工具输出都有上限。模型不能使用任意 Shell 或任意出站 HTTP 工具。

读取路径

Browser → Handler → Service → K8sRepo

┌────────────┴────────────┐
│ │
Informer Cache API Server
(sub-ms, 8 types) (fallback, all types)
  1. Handler 接收 GET 请求
  2. Service 将请求委托给 K8sRepo
  3. K8sRepo 优先查询 Informer 缓存(8 种核心资源)
  4. 若缓存未命中或该资源未被缓存,则回退到 API Server
  5. 响应中包含 meta.source(值为 "cache" 或 "apiserver")及 meta.stale 标志

写入路径

Browser → Handler → Service → K8sRepo → API Server

Informer Watch

EventListener

WS Hub

All Browsers
  1. Handler 接收 POST/PUT/DELETE 请求
  2. Service 校验后将请求委托给 K8sRepo
  3. K8sRepo 直接调用 API Server
  4. API Server 应用变更
  5. Informer Watch 检测到变更
  6. EventListener 通知 WS Hub
  7. Hub 向所有已连接的浏览器广播消息
  8. 浏览器自动更新(无需轮询)

实时推送

实时系统完全解耦:

// EventListener interface — Hub implements this
type EventListener interface {
OnResourceEvent(event ResourceEvent)
}

// Hub: non-blocking receive, drop if channel full
// (frontend has 30s fallback polling)
func (h *Hub) OnResourceEvent(event ResourceEvent) {
select {
case h.broadcast <- marshal(event):
default: // drop, don't block Informer
}
}

Informer 缓存策略

已缓存(8 种)按需查询不缓存
PodsJobsSecrets(安全考量)
DeploymentsCronJobsEvents(数据量过大)
StatefulSetsConfigMaps
DaemonSetsPVs, PVCs
ServicesStorageClasses
IngressesNetworkPolicies
NodesRoles, RoleBindings
NamespacesServiceAccounts