feat: AI 诊断 Agent 支持执行系统诊断 shell 命令

扩展 Agent 命令工具,除 kubectl 外新增节点宿主机系统诊断命令支持:

- agent_tools.py: 新增 shell 命令白名单分类器 (classify_shell_command)
  - 只读白名单: systemctl status/is-active、journalctl、crictl ps/logs、
    docker ps/logs、df、free、ss、ip addr、ps、mount、lsmod、dmesg、
    ping、nslookup、cat (限 /proc /sys /etc/kubernetes 等安全路径) 等 30+ 命令
  - 写白名单: systemctl restart/stop/start/reload 等需人工审批
  - 统一分发器 classify_agent_command 按命令前缀路由
  - 统一执行入口 execute_command 走 subprocess_exec (无 shell 注入风险)
- ai_agent.py: 更新 AGENT_SYSTEM_PROMPT 告知 AI 两类可用工具及安全规则
  - 三个调用点 (初始探测/分类/执行) 切换到统一接口
- main.py: 审批执行处改用 execute_command
- tests: 新增 19 个用例覆盖 shell 命令分类、混合执行、白名单拒绝
  - 全部 44 个测试通过
- 前端/README: 文案与文档补充 shell 命令支持说明

安全策略不变: 禁止 shell 操作符/管道/重定向/多命令拼接,
非白名单命令 (rm/vi/apt 等) 直接拒绝。
This commit is contained in:
cnbugs
2026-07-25 13:38:48 +08:00
parent f2254646c1
commit 32bea0d4ea
8 changed files with 430 additions and 39 deletions
+8 -3
View File
@@ -15,10 +15,14 @@
- 根因定位、影响评估、修复命令、优先级排序、预防建议
- **AI 自主诊断(双执行模式)**:启动前可选择命令执行方式
- **手动执行命令**:Agent 只生成命令,用户复制到自己的终端执行,服务端不会运行
- **AI 执行命令**:自动执行 `get``describe``logs``top` 等只读 kubectl 命令
- **AI 执行命令**:自动执行只读诊断命令,覆盖 kubectl 与节点宿主机两个维度
- kubectl: `get``describe``logs``top` 等只读命令
- 系统诊断: `systemctl status``journalctl``crictl ps``df``free``ss``ip addr` 等只读命令
- 实时展示思考步骤、执行命令和真实输出
- 即使选择 AI 执行,`apply``delete``patch``scale``rollout``exec` 等命令仍必须人工确认
- 禁止 shell、管道、重定向和多命令拼接
- 即使选择 AI 执行,修改命令人工确认
- kubectl: `apply``delete``patch``scale``rollout``exec`
- 系统: `systemctl restart/stop/start`
- 命令白名单严格限制,禁止 shell、管道、重定向和多命令拼接
- **历史记录持久化**:使用 SQLite 保存全部诊断与处理轨迹
- 保存完整诊断结果、文本报告、AI 分析结果
- 保存 Agent 思考、命令、真实输出、审批和执行结果
@@ -90,6 +94,7 @@ k8smanager-cli/
│ ├── main.py # FastAPI 主应用
│ ├── config.py # 配置管理
│ ├── diagnosis.py # K8S 诊断引擎 (9 大检查项)
│ ├── agent_tools.py # Agent 命令工具与安全策略 (kubectl + 系统诊断白名单)
│ └── ai_agent.py # AI Agent 分析模块
├── frontend/
│ ├── src/App.vue # 仪表盘界面