taylanbakircioglu/flowfish

GitHub: taylanbakircioglu/flowfish

基于 eBPF 的集中式多集群 Kubernetes 可观测性平台,提供实时依赖映射、变更检测及部署前影响分析。

Stars: 40 | Forks: 6

# Flowfish 集中式多集群 Kubernetes 可观测性平台 —— 基于eBPF,实现跨所有集群的实时依赖映射、影响分析、变更检测和安全监控。 ![Flowfish 展示](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/38524d7534212704.gif) ## 目录 1. [项目概述](#project-overview) - [Flowfish 是什么?](#what-is-flowfish) - [隐喻](#the-metaphor) - [功能概览](#features-at-a-glance) 2. [截图](#screenshots) - [仪表盘](#dashboard) - [分析](#analysis) - [发现](#discovery) - [影响](#impact) - [可观测性](#observability) - [安全](#security) - [报告](#reports) - [开发者](#developer) - [管理](#management) - [设置](#settings) 3. [核心能力](#key-capabilities) - [基于eBPF的数据采集](#ebpf-based-data-collection) - [分析向导与生命周期](#analysis-wizard--lifecycle) - [实时依赖映射](#real-time-dependency-mapping) - [网络浏览器](#network-explorer) - [变更检测](#change-detection) - [影响模拟](#impact-simulation) - [爆炸半径预言机](#blast-radius-oracle) - [活动监视器](#activity-monitor) - [事件时间线](#events-timeline) - [安全中心](#security-center) - [报告与导出](#reports--export) - [开发者控制台](#developer-console) - [多集群管理](#multi-cluster-management) - [用户与角色管理](#user--role-management) - [系统设置](#system-settings) - [仪表盘标签页](#dashboard-tabs) 4. [架构](#architecture) - [系统架构](#system-architecture) - [数据采集与处理流程](#data-collection--processing-flow) - [变更检测架构](#change-detection-architecture) - [数据架构](#data-architecture) - [组件详情](#component-details) 5. [技术栈](#technology-stack) 6. [快速入门](#getting-started) - [前置条件](#prerequisites) - [Docker Compose 快速开始](#docker-compose-quick-start) - [Kubernetes 部署](#kubernetes-deployment) - [默认凭证](#default-credentials) 7. [配置](#configuration) - [后端环境变量](#backend-environment-variables) - [前端环境变量](#frontend-environment-variables) - [数据库配置](#database-configuration) 8. [API 参考](#api-reference) 9. [项目结构](#project-structure) 10. [故障排除](#troubleshooting) 11. [贡献](#contributing) 12. [许可证](#license) 13. [作者](#author) 14. [支持](#support) ## 项目概述 ### Flowfish 是什么? Flowfish 是一个**集中式、多集群**的云原生可观测性平台,能够**自动发现、可视化并分析**运行在整个 Kubernetes 集群群中的应用程序之间的通信模式和依赖关系 —— 无论是单个集群还是分布在不同提供商的数十个集群。它通过单一管理平面支持 **Amazon EKS**、**Google GKE**、**Azure AKS**、**OpenShift** 以及任何符合 CNCF 标准的发行版。通过 Inspektor Gadget 框架利用 **eBPF**(扩展伯克利包过滤器)技术,Flowfish 捕获内核级的网络、进程、文件和安全事件,**无需任何应用层修改** —— 以近乎零的开销提供全栈可见性。 将所有集群连接到一个 Flowfish 实例,即可获得跨集群依赖关系、安全态势和变更模式的**统一视图**。跨多个集群和命名空间同时运行分析,并排比较环境,检测集群间通信流 —— 全部通过单一仪表盘完成。 与需要安装 agent 的传统 APM 工具或要求注入 sidecar 的服务网格不同,Flowfish 部署为轻量级 DaemonSet,并在分析开始时立即开始收集数据。收集的数据输入到多数据库架构中 —— **Neo4j** 用于图关系,**ClickHouse** 用于时间序列分析,**PostgreSQL** 用于关系元数据,**Redis** 用于实时缓存 —— 支持从交互式依赖图到部署前爆炸半径评估的所有功能。 ### 隐喻 - **鱼** —— Kubernetes Pod,在基础设施中游动的生活工作负载 - **流** —— Pod 之间的网络流量和通信流 - **水** —— 一切生存其中的 Kubernetes 环境 ### 功能概览 - **eBPF 驱动的数据采集** —— 通过 Inspektor Gadget DaemonSet 进行内核级捕获,无需更改应用程序 - **交互式依赖图** —— 实时图可视化,显示集群内和外部系统依赖(数据中心、公共互联网、SaaS API),支持 18 种布局算法、智能过滤(公共/数据中心/工作负载视图)、焦点模式和 DNS 增强 - **引导式分析向导** —— 通过分步流程创建分析,选择范围、gadget 模块、时间和数据保留 - **并发多分析** —— 跨不同集群和命名空间同时运行多个分析 - **网络浏览器** —— 以表格形式深入查看流、DNS 查询、TLS/SNI 连接和服务 - **变更检测引擎** —— 双源检测(Kubernetes API + eBPF),支持三种比较策略和 30 多种变更类型 - **影响模拟** —— 对删除、缩容、网络隔离、端口更改、镜像更新等进行假设分析,并提供回滚计划 - **爆炸半径预言机** —— 集成 CI/CD 的部署前影响评估 API,提供咨询性风险评分 - **活动监视器** —— 实时进程、文件、挂载和网络 I/O 事件跟踪,支持进程树可视化 - **事件时间线** —— 所有 eBPF 事件类型的统一视图,包含异常指标和时间范围过滤 - **安全中心** —— 安全态势评分、Linux capabilities 审计、违规跟踪和 OOM 事件监控 - **报告与导出** —— PDF、Excel、CSV、JSON 报告,支持调度、快速模板和自定义报告生成器 - **开发者控制台** —— 双数据库查询接口(ClickHouse SQL + Neo4j Cypher),配备 Monaco 编辑器和查询模板 - **安全的多集群管理** —— 添加来自任何 Kubernetes 发行版(EKS、GKE、AKS、OpenShift、原生 K8s)的集群,支持加密 token 存储、连接池和一键健康检查 - **基于角色的访问控制** —— 用户和角色管理,支持管理员、查看者和自定义角色及细粒度权限 - **多标签仪表盘** —— 概览、运维、安全、网络、变更和工作负载标签页,提供实时指标 - **CI/CD 流水线集成** —— 支持 Azure DevOps、GitHub Actions、Jenkins 和 GitLab CI 的爆炸半径检查 ## 截图 ### 仪表盘 仪表盘通过六个专门标签页提供所有已连接集群健康状况的集中概览 —— 在一处聚合来自每个集群的指标、事件和状态。 **概览** —— 黄金信号(延迟、流量、错误、饱和度)、智能洞察面板(统计异常检测、趋势分析、关联告警)和 Pod 健康网格: ![仪表盘概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d59578e546212706.png) **运维** —— 实时系统健康状况、分析状态和事件统计: ![仪表盘运维](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d4d3bd6a27212708.png) **安全** —— 安全态势评分、威胁雷达和违规细分: ![仪表盘安全](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5a770affad212710.png) **网络** —— 协议分布、顶级流量来源、跨命名空间流量矩阵、DNS 域和 TLS 主机: ![仪表盘网络](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/db0b20b1d0212712.png) **变更** —— 基础设施和行为变更跟踪及趋势图: ![仪表盘变更 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fec9ed82ce212713.png) ![仪表盘变更 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a13ad17014212715.png) **工作负载** —— Kubernetes 资源健康状况概览及 OOM 事件跟踪: ![仪表盘工作负载](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/914ae9f252212716.png) ### 分析 分析向导引导您创建新的 eBPF 数据收集会话。 **新建分析 —— 范围与 Gadget 选择**: ![新建分析向导](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fa46f9cd8c212719.png) **事件类型选择** —— 选择要激活的 eBPF gadget(网络、DNS、进程、文件、安全、TLS/SNI、OOM、socket): ![分析事件类型 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/370519acfb212720.png) ![分析事件类型 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ac8f45f7ab212723.png) **时间与大小** —— 配置持续时间、数据限制、连续与定时模式: ![分析时间大小 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4c7b560d1a212724.png) ![分析时间大小 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/493fa784db212726.png) ![分析时间大小 3](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b320639b5a212728.png) **我的分析** —— 所有已创建分析的列表,包含状态、范围和控制: ![我的分析](https://raw.githubusercontent.com/taylanbakircioglu/flowfish/main/docs/screenshots/my-analyses.png) ### 发现 **依赖图** —— 显示实时工作负载通信的交互式图表,支持命名空间分组、颜色编码集群、协议过滤器和 18 种布局算法: ![依赖图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d688826b58212759.png) **焦点模式** —— 高亮显示特定工作负载及其直接连接以进行针对性分析: ![依赖图焦点](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/91b85a0a4a212803.png) **网络浏览器** —— 流、DNS 查询、服务和 TLS/SNI 连接的表格视图,支持搜索、过滤和 CSV 导出: ![网络浏览器](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/684a65f654212804.png) ### 影响 **影响模拟** —— 选择目标工作负载并模拟变更(删除、缩容、网络隔离、资源限制、端口更改、配置更改、镜像更新)以查看受影响的服务、风险评分和影响流: ![影响模拟 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/95a8f05d03212807.png) ![影响模拟 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1c0f3ae103212809.png) **爆炸半径预言机** —— 部署前影响评估,支持 CI/CD 集成、评估历史和实时测试运行器: ![爆炸半径预言机 1](https://raw.githubusercontent.com/taylanbakircioglu/flowfish/main/docs/screenshots/blast-radius-1.png) ![爆炸半径预言机 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1d7947bd9a212815.png) **变更检测** —— 已检测基础设施变更的时间线和表格视图,包含风险级别、类型分类和导出: ![变更检测 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1b32d29e8f212817.png) ![变更检测 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/acd7e11a6d212818.png) ### 可观测性 **活动监视器** —— 实时进程执行事件、文件操作、挂载事件、网络 I/O,支持进程树视图和命名空间过滤: ![活动监视器](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/bed2015e3d212820.png) **事件时间线** —— 所有 eBPF 事件类型的统一视图,包含徽章计数、异常检测指示器、时间范围过滤和搜索: ![事件时间线](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/74fcbdbd12212821.png) ### 安全 **安全中心** —— 安全态势评分(0-100)、Linux capabilities 审计、违规和 OOM 事件跟踪: ![安全中心 - 概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9549e523c9212826.png) ![安全中心 - Capabilities](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e0e601793b212827.png) ![安全中心 - 违规](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b1e8584f95212829.png) ![安全中心 - OOM 事件](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6a43950199212833.png) ### 报告 **报告** —— 生成并下载 PDF、Excel、CSV 和 JSON 格式的报告。快速模板包括安全审计、网络分析、全数据导出和每日摘要。支持计划报告及历史记录: ![报告](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/14bb07f958212835.png) ### 开发者 **开发者控制台** —— 支持 ClickHouse(SQL)和 Neo4j(Cypher)的双数据库查询接口。配备语法高亮的 Monaco 编辑器、查询模板,支持表格、JSON 或原始格式结果: ![开发者控制台](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fa4a249ea8212837.png) **API 文档** —— 交互式 Swagger/OpenAPI 文档: ![API 文档](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/deb832414a212839.png) ### 管理 **集群管理** —— 跨提供商添加、编辑和监控集群。环境标签、gadget 健康监控、资源概览和连接测试: ![集群 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/795ab1360a212840.png) ![集群 2](https://raw.githubusercontent.com/taylanbakircioglu/flowfish/main/docs/screenshots/clusters-2.png) ![集群 3](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2b8747f1a7212920.png) **用户与角色管理** —— 用户增删改查,包含状态、角色(管理员、查看者、自定义)、活动日志和审计跟踪: ![用户与角色](https://raw.githubusercontent.com/taylanbakircioglu/flowfish/main/docs/screenshots/users.png) ### 设置 **设置** —— 分析配置、电子邮件(SMTP)、通知、数据保留、安全、外观主题、告警规则、系统设置、审计日志、备份和 API 密钥管理: ![设置](https://raw.githubusercontent.com/taylanbakircioglu/flowfish/main/docshots/settings.png) ## 核心能力 ### 基于eBPF的数据采集 Flowfish 使用 [Inspektor Gadget](https://github.com/inspektor-gadget/inspektor-gadget) 作为其数据采集骨干。Inspektor Gadget 作为 Kubernetes DaemonSet 部署,在每个节点的 Linux 内核中运行 eBPF 程序,以近乎零的开销捕获事件,且无需修改任何应用程序代码。 **工作原理:** 1. 用户通过向导创建分析,选择要观察的命名空间/工作负载以及要激活的 gadget 2. 后端指示 Inspektor Gadget 在目标节点上启动选定的 eBPF 程序 3. 捕获的事件被流式传输到摄入服务,该服务使用 Kubernetes 元数据(Pod 名称、命名空间、标签、部署所有者)对其进行增强 4. 增强后的事件发布到 RabbitMQ 并写入 ClickHouse(时间序列)、Neo4j(图关系)和 PostgreSQL(元数据) **支持的 gadget 模块:** | 模块 | Gadget | 捕获内容 | |--------|--------|----------| | **网络流** | `trace_network` | TCP/UDP 连接、源/目标 IP 和端口、字节数 | | **DNS 查询** | `trace_dns` | DNS 查询和响应、查询类型、延迟 | | **TCP 吞吐量** | `top_tcp` | TCP 吞吐量指标、连接性能 | | **TCP 重传** | `trace_tcpretrans` | TCP 重传、连接质量 | | **进程** | `trace_exec` | 进程创建/终止、命令行、PID、退出码 | | **文件 I/O** | `trace_open` | 文件打开/读/写事件、路径、权限 | | **安全** | `trace_capabilities` | Linux capabilities 使用、权限提升尝试 | | **OOM** | `trace_oomkill` | 内存不足终止事件、受害者进程 | | **Socket** | `trace_bind` | Socket 绑定事件、端口使用 | | **TLS/SNI** | `trace_sni` | TLS 握手、SNI 主机名 | | **挂载** | `trace_mount` | 卷挂载/卸载操作 | **相比替代方案的主要优势:** - **零应用更改** —— 无需 sidecar、无需 agent 库、无需代码插桩 - **极低开销** —— eBPF 在内核中运行,CPU 影响 <1-2% - **隐私优先** —— 在用户明确启动分析之前不收集任何数据 - **Kubernetes 原生** —— DaemonSet 部署、自动节点覆盖、Pod 级粒度 ### 分析向导与生命周期 分析向导提供引导式分步流程来配置新的 eBPF 数据收集会话。 #### 步骤 1:范围选择 定义**观察什么**: - 分析的**名称和描述** - **集群模式**:单集群或多集群(最多同时 5 个集群) - **范围类型**: - **整个集群** —— 监控所有命名空间 - **命名空间** —— 选择特定命名空间(支持多选和集群分组) - Deployment、Pod 和标签选择器范围(计划中) - **多集群范围模式**: - **统一范围** —— 所有选定集群的相同命名空间 - **每集群范围** —— 每个集群不同的命名空间选择(通过标签页) - **变更检测配置**: - 启用/禁用变更检测 - 策略选择:基线、滚动窗口或运行比较 #### 步骤 2:Gadget 模块 选择**激活哪些** eBPF gadget。每个模块显示其描述、预期数据量和性能影响。默认选择所有模块;至少需要选择一个。 #### 步骤 3:时间与大小 配置**收集多长时间**和**多少数据**: | 模式 | 描述 | |------|-------------| | **连续** | 无限期运行直到手动停止(可配置自动停止限制) | | **固定时长** | 运行特定时间段(分钟、小时或天) | | **计划** | 在特定时间窗口运行(开始时间 → 结束时间) | **数据保留策略:** - **无限制** —— 无大小上限 - **达到限制时停止** —— 当数据达到阈值(50 MB – 10 GB)时自动停止 - **滚动窗口** —— 保持固定数据大小,轮换旧数据(计划中) **快速预设:** 10 分钟测试、1 小时扫描、大小限制(1 GB)、默认(连续 + 无限制) **智能估算面板** —— 配置分析时,Flowfish 根据**选定的集群**、**目标命名空间**、**范围内的 Pod 数量**和**活动的 gadget 模块**动态计算估算的事件计数和数据量。估算面板显示预计的事件数/小时、数据大小/小时以及达到常见存储阈值的时间。这些估算会随着您更改范围或切换 gadget 而实时调整 —— 在开始收集之前为您提供准确的预测。实际事件量因工作负载流量模式而显著不同,因此估算值是根据您的特定选择量身定制的近似值。 #### 分析生命周期 | 状态 | 描述 | |--------|-------------| | **草稿** | 已创建但尚未开始 | | **运行中** | 正在主动收集 eBPF 数据 | | **运行中有错误** | 正在收集数据但部分 gadget 失败(部分收集) | | **已停止** | 被用户手动停止 | | **已完成** | 已结束(定时模式结束或自动停止触发) | | **失败** | 无法启动或遇到致命错误 | **并发执行:** 可以跨不同集群和命名空间同时运行多个分析。没有前端强制限制 —— 每个分析独立运行,拥有自己的范围、gadget 和时间安排。 **运行历史:** 每个分析维护运行历史记录。分析列表显示可展开的行,包含最近 5 次运行,包括开始/停止时间、收集的事件和发现的连接。 **自动停止警告:** 当分析接近其自动停止限制时,WebSocket 通知会在关闭前 2 分钟警告用户。 ### 实时依赖映射 依赖图是 Flowfish 的可视化核心。使用 **React Flow** 构建,它渲染所有发现的工作负载通信的交互式图表 —— **不仅是集群内 Pod 之间,还包括集群工作负载通信的任何外部系统**。当 Pod 连接到数据中心中的数据库、外部 SaaS API、CDN 或集群外的任何其他端点时,该连接会自动显示在地图上。DNS 增强将原始 IP 解析为域名(例如,`api.amazonaws.com` 而不是 `52.94.x.x`),使外部依赖关系立即可读。 **超越集群边界:** 地图按网络类型分类每个发现的端点: | 节点类型 | 识别方式 | 视觉 | |-----------|---------------|--------| | **Pod-Network** | 通过 Kubernetes API 解析的集群 Pod | 绿色,圆形 | | **Service-Network** | Kubernetes ClusterIP/NodePort 服务 | 紫色,圆角方形 | | **DataCenter** | 集群外的私有 IP(10.x、172.x、192.168.x)—— 数据库、遗留系统、内部 API | 青色边框 | | **Public / External** | 公共互联网 IP 或 DNS 增强域名(例如 `ghcr.io`、`api.stripe.com`) | 金色边框 | | **SDN Gateway** | 软件定义网络网关(OpenShift SDN 等) | 粉色,六边形 | | **Unresolved IP** | 未匹配任何已知工作负载的原始 IP | 灰色,虚线边框 | 这意味着 Flowfish 为您提供流量去向的**完整图景** —— 内部微服务通信、数据中心后端系统、公有云服务和第三方 API —— 全部在单一视图中。 **18 种布局算法:** | 类别 | 布局 | |----------|---------| | **拓扑** | Hub(连接最多的中心)、Concentric(按连接数环形)、Star(中心枢纽)、Circle | | **组织** | Cluster(按命名空间)、Owner(按 deployment/StatefulSet)、Tier(前端 → 后端 → DB) | | **分析** | Network(Pod 居中,外部在外)、Port(相同端口分组)、Error(错误连接优先)、Flow(源在左,目标在右) | | **几何** | Force(有机物理)、Grid(矩阵)、Tree(层次)、Mesh(六边形)、Radial(扩展环)、Layered(水平带)、Organic | **过滤系统:** 地图提供专为实际运维工作流程设计的强大过滤器: | 过滤器 | 描述 | |--------|-------------| | **Analysis** | 选择要可视化的分析 | | **Cluster** | 多选集群(多集群分析) | | **Namespace** | 多选命名空间以聚焦 | | **Public** | **仅显示真实的公共互联网目标** —— 公共 IP(例如 142.x.x.x)、DNS 增强的外部端点(例如 `api.stripe.com`)和 ingress/gateway 节点。私有数据中心 IP 被排除。非常适合识别外部 SaaS 依赖和面向互联网的流量。 | | **DataCenter** | **仅显示集群外的私有 IP** —— 10.x、172.x、192.168.x 地址,这些不是集群 Pod。这些代表数据中心系统,如本地数据库、遗留应用程序、消息队列和内部企业服务。对于映射混合基础设施依赖至关重要。 | | **Workload View** | **按 deployment/workload 名称分组 Pod** —— 将副本 Pod(例如 `app-abc123`、`app-7fb889c6d4-xyz`)合并为每个工作负载的单个节点。跨集群的相同工作负载也会合并。通过将数百个 Pod 节点减少为一组可管理的逻辑工作负载节点,显著简化大型图表。 | | **Unresolved IP** | 显示以原始 IP 地址为名称的节点 —— 用于识别应使用 FQDN 或服务名称的依赖关系 | | **Internal Traffic** | 显示/隐藏 localhost 和 127.0.0.1 连接 | | **System Namespaces** | 隐藏 `openshift-*`、`kube-*`、`default` | | **Protocol Labels** | 在边上显示协议(HTTP、TCP、gRPC 等) | | **Request Count** | 在边上显示流量 | | **Connection Limit** | 100、200、300、500、1K、2K、5K 或最大 | | **TLS Indicators** | 显示 TLS/加密连接徽章 | | **Error Filter** | 仅显示有错误的连接 | | **DNS Enrichment** | 在节点上显示 DNS、安全和 OOM 徽章 | **焦点模式** —— 点击任何节点激活焦点模式: - 焦点节点:完全不透明,放大并带有靛蓝色光晕 - 直接邻居(1 度):略微变暗,绿色光晕 - 其他所有:重度变暗(8% 不透明度) - 连接的边高亮显示;其他几乎不可见 - "清除焦点"按钮退出 **节点详情抽屉** —— 点击节点查看: - **概览标签页**:IP 解析、外部连接横幅、聚合工作负载信息、增强徽章(DNS、TLS、安全、OOM) - **连接标签页**:入站/出站表格,包含源、目标、协议、端口、请求数、错误 - **事件标签页**:事件统计面板,按类型细分(网络、DNS、进程、文件、安全等) **命名空间颜色编码** —— 每个命名空间从精选调色板获得独特颜色。控制面板中的命名空间标签可点击以快速高亮。多集群模式添加集群颜色边框。 **导出** —— ZIP 归档(nodes.csv + edges.csv + metadata.txt)或扁平 CSV,包含完整源/目标详情,UTF-8 BOM 以兼容 Excel。 **实时更新** —— 分析运行时图数据每 10 秒自动刷新。提供手动刷新按钮用于按需更新。 **MiniMap** —— 可平移和缩放的缩略图,用于在大型图表中导航。 **搜索** —— 服务端搜索(3+ 字符)查询 Neo4j;客户端搜索匹配名称、IP、命名空间、标签、所有者和镜像元数据。 ### 网络浏览器 网络浏览器提供对原始收集数据的结构化、表格化深入查看 —— 以可搜索、可排序和可导出的表格补充可视化依赖图。 **标签页:** | 标签页 | 数据 | 关键列 | |-----|------|-------------| | **Flows** | 每个观察到的网络连接 | 源 Pod/命名空间、目标 Pod/命名空间、协议(TCP/UDP)、源端口、目标端口、发送/接收字节、包计数、首次/最后看见时间戳 | | **Services** | 分析期间发现的 Kubernetes 服务 | 服务名称、命名空间、类型、端口、选择器、关联端点、集群 | | **DNS** | DNS gadget 捕获的所有 DNS 查询 | 查询域名、查询类型(A、AAAA、CNAME、SRV、MX)、响应码(NOERROR、NXDOMAIN、SERVFAIL)、解析 IP、查询计数、源 Pod/命名空间 | | **TLS/SNI** | 通过 SNI 检查捕获的加密连接 | SNI 主机名(服务器名称)、源 Pod/命名空间、目标 IP、端口、连接计数首次/最后看见 | **所有标签页的功能:** - 最少 3 个字符的全文本搜索 - 列级排序(点击任何列标题) - 命名空间和 Pod 过滤 - 可配置页面大小的分页 - CSV 导出,UTF-8 BOM 以兼容 Excel - 分析选择器以在不同收集运行之间切换 ### 变更检测 变更检测是一个双源引擎,结合 **Kubernetes API 轮询**和 **eBPF 事件分析**来实时检测基础设施和行为变更。 #### 检测源 | 来源 | 检测器 | 捕获内容 | |--------|----------|----------------| | **Kubernetes API** | `K8sDetector` | 工作负载添加/移除、副本变更、镜像更新、配置更改、标签更改、资源限制更改、环境变量更改、服务端口/选择器/类型更改、网络策略更改、ingress/route 更改 | | **eBPF 事件** | `EbpfDetector` | 新建/移除的连接、端口更改、流量异常(基线 3 倍)、延迟飙升(基线 2.5 倍)、DNS 异常(NXDOMAIN 飙升)、可疑进程执行(nc、curl、nmap 等)、错误率异常 | #### 比较策略 | 策略 | 用例 | 工作原理 | |----------|----------|-------------| | **基线** | 长期运行的分析、漂移检测 | 使用前 10 分钟作为基线,将当前 5 分钟窗口与之比较;适应短期分析 | | **滚动窗口** | 持续监控 | 将前一个 5 分钟窗口与当前 5 分钟窗口比较 | | **运行比较** | 部署验证、A/B 测试 | 将当前分析运行与前一次运行比较;如果不存在前一次运行则回退到基线 | #### 变更类型(30+) **基础设施:** `workload_added`、`workload_removed`、`replica_changed`、`config_changed`、`image_changed`、`resource_changed`、`env_changed`、`spec_changed`、`label_changed`、`service_port_changed`、`service_selector_changed`、`service_type_changed`、`service_added`、`service_removed`、`network_policy_added/removed/modified`、`ingress_added/removed/modified`、`route_added/removed/modified` **连接:** `connection_added`、`connection_removed`、`port_changed` **异常:** `traffic_anomaly`、`dns_anomaly`、`process_anomaly`、`error_anomaly` #### 风险评估 每个变更自动分配风险级别: - **Critical** —— 副本缩放到零、NXDOMAIN 飙升、具有大爆炸半径的工作负载移除 - **High** —— 工作负载移除、端口更改、连接移除、镜像更改 - **Medium** —— 配置更改、标签更改、错误率飙升 - **Low** —— 添加、轻微副本更改 #### 前端视图 | 标签页 | 描述 | |-----|-------------| | **时间线** | 按时间顺序排列的事件流,带有风险颜色标记,可按类型和时间范围过滤 | | **分析** | 图表:按类型、按命名空间、按风险级别的变更,随时间变化的趋势 | | **快照比较** | 两个时间段之间工作负载、连接和命名空间的前后计数 | | **运行比较** | 两次分析运行并排比较 | 通过 WebSocket 实时更新。导出为 CSV、Excel、PDF 和 JSON。保存的过滤器预设可快速访问常用视图。 ### 影响模拟 影响模拟回答这个问题:*"如果我进行此更改会发生什么?"* 通过遍历 Neo4j 依赖图来识别所有直接和间接受影响的服务。 #### 目标选择 从分析期间发现的资源中选择目标(非来自实时集群 API): - **集群 → 分析 → 命名空间(可选)→ 目标类型 → 目标** - 目标类型:Deployment、Pod、Service、外部端点 - 支持 URL 参数用于从其他页面深度链接 #### 模拟变更类型 | 类型 | 类别 | 描述 | |------|----------|-------------| | **删除 / 移除** | 破坏性 | 模拟工作负载的完全移除 | | **缩容** | 扩缩容 | 将副本减少到零,评估容量影响 | | **网络隔离** | 网络 | 模拟网络策略阻止进出工作负载的所有流量 | | **资源限制变更** | 资源 | 模拟 CPU/内存约束更改 | | **端口更改** | 网络 | 模拟更改服务端口 | | **配置更改** | 配置 | 模拟 ConfigMap 或 Secret 修改 | | **镜像更新** | 部署 | 模拟容器镜像版本更改 | | **应用网络策略** | 网络(高级) | 模拟应用新网络策略 | | **移除网络策略** | 网络(高级) | 模拟移除现有网络策略 | #### 影响计算 后端遍历 Neo4j 依赖图: 1. **查找目标** —— 在图中按名称和命名空间匹配 2. **直接依赖(1 跳)** —— 来自目标节点的所有出边和入边 3. **间接依赖(2 跳)** —— 从直接依赖到其他节点的边 4. **过滤** —— 移除基础设施端点、去重 5. **评分** —— 根据以下因素计算每个受影响服务的风险:依赖类型(直接 +0.3)、请求量(对数尺度)、关键命名空间奖励(+0.15)、知名端口奖励(+0.1)和变更类型严重性 #### 影响结果 - **摘要**:总受影响数、高/中/低影响计数、爆炸半径、置信度评分 - **每服务详情**:影响级别、影响类别(服务中断、连接丢失、级联风险、性能下降、安全暴露等)、依赖类型、建议、风险评分、风险因素和连接详情(协议、端口、请求数) - **影响流程图**:目标在中心,直接依赖在上,间接依赖在下,按影响级别颜色编码 - **无依赖情况**:智能检测隔离工作负载、仅外部服务或未匹配图节点,并提供可操作建议 #### 时间线与回滚 - **时间线标签页**:传播阶段 —— 立即(0-5 分钟)、短期(5-30 分钟)、长期(30+ 分钟) - **回滚标签页**:可行性评估(高/中/低)、预计时间、带 `kubectl` 示例的分步回滚程序、复杂度指标 #### 调度与历史 - 计划模拟:一次、每天或每周,执行前通知 - 如果超过失败阈值则自动回滚选项 - 完整的模拟历史及重放功能 #### 混沌工程模板 混沌实验的预构建模板:Pod 终止、网络分区、CPU 压力、内存压力、依赖故障、配置漂移、DNS 故障、滚动重启混沌 —— 每个都有严重性评级、前置条件和回滚时间估计。 ### 爆炸半径预言机 爆炸半径预言机提供专为 CI/CD 流水线集成设计的**部署前影响评估 API**。它**仅作建议** —— Flowfish 提供风险评分和建议,但绝不阻止部署;决策权在流水线。 #### 工作原理 1. 流水线使用变更详情调用 Flowfish 爆炸半径 API 2. Flowfish 遍历 Neo4j 依赖图以识别受影响的服务 3. 计算风险评分(0-100)并返回建议 4. 流水线根据配置的阈值决定是否继续 #### 风险评分公式 | 因素 | 最高分 | 计算 | |--------|-----------|-------------| | **变更类型严重性** | 25 | delete: 25, network_policy: 20, scale/image: 10, config: 8, resource: 5 | | **直接依赖** | 30 | `min(30, direct_count × 6)` | | **间接依赖** | 20 | `min(20, indirect_count × 2)` | | **关键服务** | 15 | `min(15, critical_count × 5)` | | **工作时间** | 10 | 工作日 UTC 9-18 点 +10 | | 风险级别 | 分数 | 建议 | |------------|-------|---------------| | **Critical** | ≥ 75 | `delay_suggested` | | **High** | ≥ 50 | `review_required` | | **Medium** | ≥ 25 | `proceed` | | **Low** | < 25 | `proceed` | #### API 响应 ``` { "assessment_id": "br-20260301-143022", "risk_score": 62, "risk_level": "high", "confidence": 0.85, "blast_radius": { "total_affected": 8, "direct_dependencies": 3, "indirect_dependencies": 5, "critical_services": 1, "namespaces_affected": 2 }, "recommendation": "review_required", "suggested_actions": [ {"priority": 1, "action": "Schedule during maintenance window", "reason": "High direct dependency count", "automatable": false}, {"priority": 2, "action": "Prepare rollback plan", "reason": "Critical service in blast radius", "automatable": true} ], "advisory_only": true } ``` #### CI/CD 集成示例 **Azure DevOps:** ``` - script: | RESULT=$(curl -s -X POST "$(FLOWFISH_URL)/api/v1/blast-radius/assess" \ -H "Authorization: Bearer $(FLOWFISH_TOKEN)" \ -H "Content-Type: application/json" \ -d '{"cluster_id": $(CLUSTER_ID), "change": {"type": "image_update", "target": "payment-service", "namespace": "production"}}') echo "Risk Score: $(echo $RESULT | jq '.risk_score')" echo "##vso[task.setvariable variable=BLAST_RADIUS_SCORE]$(echo $RESULT | jq '.risk_score')" displayName: 'Blast Radius Check' ``` **GitHub Actions:** ``` - name: Blast Radius Check run: | RESULT=$(curl -s -X POST "${{ secrets.FLOWFISH_URL }}/api/v1/blast-radius/assess" \ -H "Authorization: Bearer ${{ secrets.FLOWFISH_TOKEN }}" \ -H "Content-Type: application/json" \ -d '{"cluster_id": ${{ env.CLUSTER_ID }}, "change": {"type": "image_update", "target": "payment-service", "namespace": "production"}}') echo "Risk: $(echo $RESULT | jq -r '.risk_level')" ``` **Jenkins:** ``` stage('Blast Radius Check') { steps { script { def result = httpRequest( url: "${FLOWFISH_URL}/api/v1/blast-radius/assess", httpMode: 'POST', customHeaders: [[name: 'Authorization', value: "Bearer ${FLOWFISH_TOKEN}"]], requestBody: '{"cluster_id": ' + CLUSTER_ID + ', "change": {"type": "image_update", "target": "payment-service", "namespace": "production"}}' ) def json = readJSON text: result.content if (json.risk_level == 'critical') { input message: "Critical blast radius detected. Proceed?" } } } } ``` #### 实时测试运行器 UI 包含用于临时评估的实时测试运行器:选择集群、分析、目标服务、命名空间和变更类型。结果显示风险评分仪表盘、置信度、受影响服务计数和建议操作。 #### 评估历史 所有评估的完整历史,包含评估 ID、时间戳、目标、命名空间、变更类型、风险评分、风险级别、受影响计数和流水线来源。点击任何条目查看详细 JSON 视图。 ### 活动监视器 活动监视器提供对 eBPF gadget 捕获的内核级事件的实时可见性,组织为四个专门标签页。 **事件类别标签页:** | 标签页 | 捕获的事件 | 关键字段 | |-----|----------------|------------| | **进程** | 每个进程执行和终止 | 完整命令行、PID、父 PID、退出码、用户、持续时间、容器 | | **文件操作** | 文件打开、读取、写入、关闭和删除事件 | 完整路径、操作类型、权限、访问模式、容器 | | **挂载** | 容器内的卷挂载和卸载操作 | 挂载点、文件系统类型、选项、容器 | | **网络 I/O** | socket 级别的原始网络发送/接收事件 | 源/目标 IP、端口、字节数、协议、时间 | **过滤器和控件:** - **分析选择器** —— 选择要检查的正在运行或已完成的分析 - **时间范围** —— 预设:最近 1 小时、6 小时、24 小时、7 天、30 天或自定义范围 - **命名空间过滤器** —— 将事件缩小到特定命名空间 - **快速过滤器** —— 所有事件、可疑(标记的活动)、Shell(shell 进程)、网络工具、错误、高活动 - **搜索** —— 跨 Pod、进程和文件路径的全文本搜索(3+ 字符) - **分组方式** —— 在分组(按进程)和平铺视图之间切换 - **自动刷新** —— 关闭、5 秒、10 秒、30 秒或 1 分钟间隔 **可视化:** - **活动时间线** —— 包含 60 个时间桶的条形图,按事件类型(进程、文件、挂载、网络)颜色编码,显示随时间的事件密度 - **统计行** —— 进程事件、文件操作、挂载事件、网络 I/O、传输数据和总事件的实时计数器 - **进程树** —— 点击任何进程在树形模态框中查看其父子层次结构,揭示进程如何在容器内生成 - **相关事件** —— 点击进程在详情模态框中查看其关联的文件操作和网络流 **导出** —— CSV 或 JSON,包含所有事件详情。 ### 事件时间线 事件时间线提供分析期间捕获的每种 eBPF 事件类型的**统一、按时间顺序的视图** —— 所有内核级活动的单一管理平面。 **带有实时计数徽章的事件类型:** | 事件类型 | 显示内容 | |-----------|---------------| | **网络流** | 带有源/目标、端口、字节、包的 TCP/UDP 连接 | | **DNS 查询** | 带有域名、查询类型、响应码、延迟的 DNS 查找 | | **进程** | 带有命令行、PID、退出码的进程 exec/exit | | **文件 I/O** | 带有路径、操作、权限的文件操作 | | **安全** | Linux capability 使用、权限提升尝试 | | **OOM Kill** | 带有受害者、容器、内存限制的内存不足终止 | | **Socket Bind** | 带有端口和协议的 socket 绑定事件 | | **TLS/SNI** | 带有 SNI 主机名和连接详情的 TLS 握手 | | **挂载** | 卷挂载/卸载操作 | **过滤器和控件:** - **分析和集群选择器** —— 选择分析,对于多集群分析,按集群过滤 - **事件类型多选** —— 显示/隐藏特定事件类型 - **时间范围** —— 预设(最近 1 小时、6 小时、24 小时、7 天、30 天)或自定义 - **命名空间过滤器** —— 缩小到特定命名空间 - **快速过滤器** —— 所有事件、异常(统计检测)、安全、网络、进程/文件、错误、高容量 - **搜索** —— 全文本搜索(3+ 字符) - **自动刷新** —— 关闭、5 秒、10 秒、30 秒、1 分钟 **查看模式:** - **普通视图** —— 所有事件的平铺表格,可按任何列排序,带有可展开的详情行和 JSON 复制 - **分组视图** —— 按类型分组的事件,显示计数、最新事件、样本事件和每种类型的异常计数 - **时间线图表** —— 包含 60 个时间桶的条形图,按事件类型堆叠,显示随时间的事件量模式 **异常检测** —— 统计指标(Z 分数、偏离基线)将事件标记为异常。异常徽章出现在事件类型标签和单个事件上,便于发现 DNS、网络、进程、文件、安全和 OOM 事件中的异常模式。 **导出** —— CSV 或 JSON,包含完整事件详情和元数据。 ### 安全中心 安全中心提供基于 eBPF 捕获数据的全面安全态势评估。 **安全评分(0-100)** 根据 Linux capabilities 使用、安全违规、OOM 频率、外部通信模式和未加密流量比率计算。 **标签页:** - **Capabilities** —— 列出 Pod 使用的每个 Linux capability(例如 `NET_ADMIN`、`SYS_PTRACE`、`DAC_OVERRIDE`)及每个 capability 的风险评估。危险 capability 标记为 critical/high 风险。 - **违规** —— 安全策略违规:未授权连接、权限提升尝试、策略违规。 - **OOM 事件** —— 内存不足终止,包含受害者进程、容器、内存限制和时间戳。 风险颜色编码:Critical(红色)、High(橙色)、Medium(黄色)、Low(绿色)。 ### 报告与导出 | 报告类型 | 描述 | |-------------|-------------| | **依赖报告** | 带有指标的完整工作负载依赖图 | | **事件导出** | 给定时间范围的原始 eBPF 事件 | | **网络流** | 所有观察到的网络连接 | | **DNS 查询** | 完整 DNS 查询日志 | | **安全评估** | 带有风险评分的安全态势报告 | | **统计摘要** | 聚合指标和趋势 | | **周期比较** | 两个时间段的并排比较 | **格式:** PDF、CSV、JSON、Excel **快速模板:** 安全审计、网络分析、全数据导出、每日摘要 **附加标签页:** SLO/SLA 跟踪、趋势分析、自定义报告生成器 **调度:** 定期报告(每天、每周、每月)通过电子邮件发送或保存到存储。 ### 开发者控制台 直接查询访问 Flowfish 的两个分析数据库: - **ClickHouse(SQL)** —— 时间序列数据:网络流、DNS 查询、进程事件、文件访问、指标 - **Neo4j(Cypher)** —— 依赖图:工作负载节点、通信边、遍历、最短路径 **Monaco 编辑器**,配备语法高亮、自动补全和错误标记。结果支持表格、JSON 或原始格式。常见任务的预构建查询模板。本地存储中的查询历史。分析和集群范围限定。 ### 多集群管理 Flowfish 支持通过单一界面管理多个集群,具备企业级安全性。它兼容任何符合 CNCF 标准的 Kubernetes 发行版,包括托管云产品和本地安装。 #### 支持的提供商 | 提供商 | 类型 | 备注 | |----------|------|-------| | **Kubernetes** | 自管理 / 本地 | 任何原生 K8s 发行版 | | **OpenShift** | Red Hat 企业版 | 完全支持 OpenShift SDN 和 Routes | | **Amazon EKS** | AWS 托管 Kubernetes | 默认 StorageClass: `gp2` / `gp3` | | **Google GKE** | Google Cloud 托管 Kubernetes | 默认 StorageClass: `standard` | | **Azure AKS** | Microsoft Azure 托管 Kubernetes | 默认 StorageClass: `managed-premium` | #### 环境标签 每个集群都标记有环境标签以便组织区分:**Production**、**Staging**、**Development**、**Testing**。 #### 添加集群 添加集群流程经过精简以减少摩擦: 1. **基本信息** —— 名称、环境标签、提供商选择 2. **连接** —— 选择连接类型并提供凭证: | 类型 | 用例 | 必需项 | |------|----------|----------| | **In-Cluster** | Flowfish 部署在集群内 | API URL 自动检测 | | **Token** | 通过 ServiceAccount 访问远程集群 | API URL + Token | | **Kubeconfig** | 通过 kubeconfig 文件访问远程集群 | Kubeconfig 内容 | 3. **测试连接** —— 在保存前验证集群连接和 Inspektor Gadget 健康状况 4. **设置脚本** —— 一键生成安装/卸载脚本,具有提供商感知默认值(例如 EKS/GKE/AKS/vSphere 的正确 StorageClass),可选自定义 StorageClass 配置 #### 安全 - **加密凭证存储** —— 所有 token、CA 证书和 kubeconfig 内容在存储到 PostgreSQL 之前使用 Fernet(AES-128-CBC)静态加密 - **连接池** —— 集群连接延迟创建并缓存;Cluster Manager gRPC 服务充当网关,因此凭证永远不会离开后端 - **健康监控** —— 定期健康检查验证集群连接和 Inspektor Gadget 可用性 - **无直接 K8s API 暴露** —— 所有 Kubernetes API 调用通过 Cluster Manager 服务代理,仅在需要时在内存中解密凭证 ### 用户与角色管理 #### 用户管理 创建、编辑、停用和删除用户账户。用户表显示用户名、全名、电子邮件、活动/非活动状态、分配的角色和最后登录时间戳。每个用户都有编辑配置文件、分配角色、更改密码和删除的操作。 #### 内置角色 | 角色 | 描述 | 关键权限 | |------|-------------|-----------------| | **Admin** | 完全系统访问 | 所有资源的所有权限 | | **Operator** | 集群和分析操作 | 查看所有 + 创建/编辑/启动集群和分析 | | **Analyst** | 分析和报告 | 查看所有 + 创建分析、导出事件、生成报告 | | **Viewer** | 只读访问 | 查看仪表盘、分析、事件、报告、集群 | #### 自定义角色与细粒度权限 创建具有细粒度权限分配的自定义角色。权限按资源组织: | 资源 | 可用权限 | |----------|----------------------| | **Dashboard** | 查看、统计 | | **Analysis** | 查看、创建、启动/停止、删除 | | **Clusters** | 查看、创建、编辑、删除 | | **Events** | 查看、导出 | | **Reports** | 查看、生成、计划、历史 | | **Security** | 查看、管理 | | **Users** | 查看、创建、编辑、删除 | | **Roles** | 查看、创建、编辑、删除 | | **Settings** | 查看、编辑 | #### 角色分配 角色通过每个用户专用的"分配角色"操作进行分配(多选)。只有管理员可以修改角色分配。角色更改立即生效。 #### 活动日志与审计跟踪 每个用户操作都记录在活动日志中,包含:用户名、操作类型(登录、登出、创建、更新、删除、启动、停止、导出、生成、计划、分配、撤销)、资源类型和名称、详情(JSON)、客户端 IP 地址、用户代理、成功/失败状态和时间戳。审计日志可搜索、过滤和导出。 #### 基于角色的 UI 前端根据用户权限动态调整。没有创建/启动权限的用户看到只读视图 —— 操作按钮(创建分析、启动、停止、删除、管理集群)被隐藏或禁用。 ### 系统设置 | 类别 | 配置 | |----------|---------------| | **分析** | 自动停止行为、时间限制、默认持续时间预设、连续模式限制 | | **电子邮件** | SMTP 服务器、发件人地址、身份验证 | | **通知** | 告警渠道、通知规则、严重性阈值 | | **数据保留** | 每数据库保留期、自动清理计划 | | **安全** | 会话超时、密码策略、API 密钥管理 | | **外观** | 明/暗主题、自定义品牌 | | **告警规则** | 自定义告警条件和操作 | | **系统** | 日志级别、性能调优、功能标志 | | **审计日志** | 系统审计跟踪查看和导出 | | **备份** | 数据库备份计划和恢复 | | **API 密钥** | 生成和管理 API 访问令牌 | ### 仪表盘标签页 | 标签页 | 关键指标 | |-----|------------| | **概览** | 黄金信号(请求率、错误率、延迟 p50/p95/p99、饱和度)、智能洞察(统计异常检测、趋势分析、关联告警)、Pod 健康网格、按流量排名的顶级服务、风险分布 | | **运维** | 活动分析、系统组件健康状况、事件摄入率、最近告警、资源趋势 | | **安全** | 聚合安全评分、威胁雷达、顶级违规、capability 热图、OOM 终止趋势 | | **网络** | 协议分布、顶级流量来源、跨命名空间流量矩阵、顶级 DNS 域、TLS 主机分布 | | **变更** | 按类型变更计数、变更时间线、风险加权评分、变更最频繁的工作负载 | | **工作负载** | 资源健康状况摘要、Pod 状态分布、按工作负载的 OOM、资源警告 | ## 架构 ### 系统架构 ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ PRESENTATION LAYER │ │ │ │ ┌───────────────────────┐ ┌───────────────────────┐ │ │ │ Nginx Ingress │ │ React SPA │ │ │ │ (TLS Termination) │──────▶│ (TypeScript + │ │ │ │ │ │ Ant Design) │ │ │ └───────────────────────┘ └───────────┬───────────┘ │ └───────────────────────────────────────────────┼─────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ APPLICATION LAYER │ │ │ │ ┌────────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ FastAPI Backend │ │ Analysis │ │ Cluster Manager │ │ │ │ (REST + WebSocket) │ │ Orchestrator │ │ (gRPC) │ │ │ │ │ │ (gRPC) │ │ │ │ │ └──┬──┬──┬──┬────────┘ └────────┬─────────┘ └──────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌─────────────────┐│ ┌──────────────────┐ │ │ │ │ │ │ │ API Gateway ││ │ Change Detection │ │ │ │ │ │ │ │ (gRPC) ││ │ Worker │ │ │ │ │ │ │ └─────────────────┘│ └──────────────────┘ │ └──────┼──┼──┼──┼─────────────────────┼───────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ DATA COLLECTION LAYER │ │ │ │ │ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ │ │ IG Node 1 │ │ IG Node 2 │ │ IG Node N │ │ │ │ │ │ │ │ (eBPF) │ │ (eBPF) │ │ (eBPF) │ │ │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ └─────────┼───────────────┼───────────────┼───────────┘ │ │ │ │ │ │ │ │ │ │ │ └───────────────┼───────────────┘ │ │ │ │ ▼ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ DATA INGESTION LAYER (Write Path) │ │ │ │ │ │ │ │ │ │ │ │ ┌─────────────────────────┐ │ │ │ │ │ │ │ Ingestion Service │ │ │ │ │ │ │ │ (gRPC + K8s Enrichment) │ │ │ │ │ │ │ └────────────┬─────────────┘ │ │ │ │ │ │ ▼ │ │ │ │ │ │ ┌─────────────────────────┐ │ │ │ │ │ │ │ RabbitMQ │ │ │ │ │ │ │ │ (Event Routing) │ │ │ │ │ │ │ └──────┬──────────┬────────┘ │ │ │ │ │ │ ▼ ▼ │ │ │ │ │ │ ┌────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ Graph │ │ Timeseries │ │ │ │ │ │ │ │ Writer │ │ Writer │ │ │ │ │ │ │ └─────┬──────┘ └────────┬────────┘ │ │ │ │ │ └────────┼─────────────────┼──────────────────────────┘ │ │ │ │ │ (write) │ (write) │ │ │ │ ▼ ▼ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ QUERY LAYER (Read Path) │ │ │ │ │ │ │ │ │ │ │ │ ┌───────────────────┐ ┌────────────────────────┐ │ │ │ │ │ │ │ Graph Query │ │ Timeseries Query │ │ │ │ │ │ │ │ Service (REST) │ │ Service (REST) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ • Dependency map │ │ • Event queries │ │ │ │ │ │ │ │ • Impact analysis │ │ • Event statistics │ │ │ │ │ │ │ │ • Blast radius │ │ • Dev Console (SQL) │ │ │ │ │ │ │ │ • Dev Console │ │ • Anomaly data │ │ │ │ │ │ │ │ (Cypher) │ │ • Change event queries │ │ │ │ │ │ │ └────────┬──────────┘ └───────────┬────────────┘ │ │ │ │ │ └───────────┼─────────────────────────┼───────────────┘ │ │ │ │ │ (read) │ (read) ▼ ▼ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ DATA STORAGE LAYER │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ PostgreSQL │ │ Neo4j │ │ ClickHouse │ │ Redis │ │ │ │ (Metadata & │ │ (Dependency │ │ (Time-Series │ │ (Cache & │ │ │ │ Config) │ │ Graph) │ │ Events) │ │ Pub/Sub) │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` **层级描述:** | 层级 | 组件 | 角色 | |-------|-----------|------| | **表现层** | Nginx Ingress、React SPA | TLS 终止、单页应用 UI | | **应用层** | FastAPI、Analysis Orchestrator、Cluster Manager、API Gateway、Change Detection Worker | 业务逻辑、编排、集群操作、变更分析 | | **数据采集** | Inspektor Gadget DaemonSet(每节点) | 网络、DNS、进程、文件、安全事件的内核级 eBPF 捕获 | | **数据摄入** | Ingestion Service、RabbitMQ、Graph Writer、Timeseries Writer | K8s 元数据增强、事件路由、批量写入(写路径) | | **查询** | Graph Query Service、Timeseries Query Service | Neo4j 和 ClickHouse 的数据库无关查询抽象(读路径) | | **数据存储** | PostgreSQL、Neo4j、ClickHouse、Redis | 元数据、依赖图、时间序列分析、缓存 | ### 数据采集与处理流程 ``` ┌──────┐ ┌──────────┐ ┌──────────────┐ ┌─────────────────────┐ │ User │────▶│ Frontend │────▶│ Backend API │────▶│ Analysis │ └──────┘ └──────────┘ │ (FastAPI) │ │ Orchestrator (gRPC) │ Create & POST /analyses └──────┬───────┘ └──────────┬──────────┘ Start │ │ Analysis │ Save config │ Start collection ▼ ▼ ┌───────────┐ ┌──────────────┐ │PostgreSQL │ │Kubernetes API│ └───────────┘ └──────┬───────┘ │ Resolve scope ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ DATA COLLECTION (per node) │ │ │ │ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ │ │ Inspektor Gadget │ │ Inspektor Gadget │ │ Inspektor Gadget │ │ │ │ Node 1 (eBPF) │ │ Node 2 (eBPF) │ │ Node N (eBPF) │ │ │ │ │ │ │ │ │ │ │ │ • Network flows │ │ • DNS queries │ │ • Process events │ │ │ │ • DNS queries │ │ • TLS/SNI events │ │ • File events │ │ │ │ • Process events │ │ • Security events │ │ • Mount events │ │ │ └────────┬──────────┘ └────────┬──────────┘ └────────┬──────────┘ │ └────────────┼──────────────────────┼──────────────────────┼─────────────┘ │ │ │ └──────────────────────┼──────────────────────┘ │ gRPC stream ▼ ┌──────────────────────────────────────────┐ │ Ingestion Service │ │ (gRPC + Kubernetes metadata enrichment) │ │ │ │ • Resolve pod names, labels, owners │ │ • Classify network types (Pod/Svc/Ext) │ │ • DNS enrichment for external endpoints │ └─────────────────┬─────────────────────────┘ │ ▼ ┌──────────────────────────────────────────┐ │ RabbitMQ (Event Routing) │ │ │ │ graph_events ──────▶ Graph Writer ──────▶ Neo4j │ (batch upsert) (dependency graph) │ │ │ ts_events ─────────▶ Timeseries Writer ─▶ ClickHouse │ (batch insert) (time-series events) └──────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────┐ │ CHANGE DETECTION (periodic) │ │ │ │ Change Detection Worker │ │ │ │ │ ├──▶ Neo4j ──── Query current graph snapshot │ │ ├──▶ PostgreSQL ── Compare with previous snapshot │ │ ├──▶ ClickHouse ── Query eBPF event metrics │ │ │ │ │ └──▶ RabbitMQ ──▶ change_events ──▶ ClickHouse + WebSocket (alerts) │ └─────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────┐ │ QUERY & VISUALIZATION (Read Path) │ │ │ │ User ──▶ Frontend ──▶ Backend API ──┬──▶ Graph Query Service ──▶ Neo4j│ │ │ (dependency map, impact, │ │ │ blast radius, Cypher) │ │ │ │ │ └──▶ Timeseries Query ──▶ CH │ │ Service │ │ (events, stats, SQL) │ │ │ │ Dev Console ──▶ Graph Query Service ──▶ Cypher queries ──▶ Neo4j │ │ Timeseries Query Svc ──▶ SQL queries ──▶ ClickHouse │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### 变更检测架构 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ DETECTION SOURCES │ │ │ │ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │ │ │ Kubernetes API │ │ eBPF Events (ClickHouse) │ │ │ │ │ │ │ │ │ │ • Deployments, ReplicaSets │ │ • network_flows │ │ │ │ • Services, Endpoints │ │ • dns_queries │ │ │ │ • NetworkPolicies │ │ • process_events │ │ │ │ • Ingresses, Routes │ │ • tls_events, file_events │ │ │ │ • ConfigMaps, Secrets │ │ • security_events │ │ │ └──────────────┬──────────────┘ └──────────────┬──────────────┘ │ └──────────────────┼─────────────────────────────────┼───────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ CHANGE DETECTION WORKER │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ Periodic Scheduler (configurable interval) │ │ │ └──────┬─────────────────────────────────┬───────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ K8s Detector │ │ eBPF Detector │ │ │ │ (30+ change │ │ (Connection & │ │ │ │ types) │ │ anomaly changes)│ │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ │ │ │ └───────────────┬───────────────┘ │ │ ▼ │ │ ┌─────────────────────┐ ┌────────────────────┐ │ │ │ Strategy Engine │ │ Circuit Breaker │ │ │ │ │ │ (3 failures → skip)│ │ │ └──┬──────┬──────┬───┘ └────────────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │ │ Baseline │ │ Rolling │ │ Run │ │ │ │ Strategy │ │ Window │ │ Comparison │ │ │ │ │ │ │ │ │ │ │ │ First 10min │ │ Prev 5min │ │ Current run │ │ │ │ baseline vs │ │ vs current │ │ vs previous │ │ │ │ current │ │ 5min │ │ run │ │ │ └─────────────┘ └─────────────┘ └──────────────┘ │ └────────────────────────────────┬────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ STORAGE & DELIVERY │ │ │ │ RabbitMQ (change_events exchange) │ │ │ │ │ ├──▶ Timeseries Writer ──▶ ClickHouse (change_events table) │ │ │ │ │ └──▶ WebSocket ──▶ Real-time UI alerts (critical changes) │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### 数据架构 Flowfish 使用多语言持久化策略,为每种数据类型选择最优数据库: | 数据库 | 存储的数据 | 为什么选择此数据库 | |----------|------------|-------------------| | **PostgreSQL** | 用户、角色、集群(加密凭证)、分析、配置、审计日志 | ACID 合规、关系完整性、加密存储 | | **Neo4j** | 工作负载节点(Pod、Deployment、Service)、通信边(COMMUNICATES_WITH、PART_OF、EXPOSES、DEPENDS_ON) | 依赖链、影响分析和爆炸半径计算的原生图遍历 | | **ClickHouse** | 网络流、DNS 查询、TCP 连接、进程事件、文件访问事件、安全事件、变更事件 | 列式存储、对数十亿行的亚秒级分析、按日期分区以保留 | | **Redis** | 会话缓存、实时指标、WebSocket pub/sub、分布式锁(领导者选举)、速率限制 | 微秒级延迟、用于实时更新的 pub/sub | | **RabbitMQ** | 事件路由(摄入 → 写入器、变更事件 → 时序写入器) | 可靠交付、死信队列、解耦生产者/消费者 | **数据流:** 1. **eBPF 事件**(写)→ Ingestion Service → RabbitMQ → Graph Writer(Neo4j)+ Timeseries Writer(ClickHouse) 2. **Kubernetes 元数据**(写)→ Ingestion Service 增强 → 与事件一起存储 3. **变更事件**(写)→ Change Detection Worker → RabbitMQ → Timeseries Writer(ClickHouse) 4. **图查询**(读)→ Backend → Graph Query Service → Neo4j(依赖图、影响模拟、爆炸半径、Dev Console Cypher) 5. **时序查询**(读)→ Backend → Timeseries Query Service → ClickHouse(事件时间线、活动监视器、报告、Dev Console SQL) 6. **配置/认证** → Backend → PostgreSQL(用户、集群、分析) ### 组件详情 | 组件 | 技术 | 角色 | 副本数 | |-----------|-----------|------|----------| | **Frontend** | React 18 + TypeScript + Ant Design + React Flow | 单页应用、图可视化 | 2+ (HPA) | | **Backend** | Python 3.11 + FastAPI | REST API、WebSocket、业务逻辑、认证 | 3+ (HPA) | | **Analysis Orchestrator** | Python + gRPC | 分析生命周期、gadget 协调 | 1-3 | | **Cluster Manager** | Python + gRPC | 多集群连接网关、凭证解密 | 1-2 | | **API Gateway** | Python + gRPC | 请求路由、速率限制 | 1-2 | | **Ingestion Service** | Python + gRPC | 事件增强、元数据解析 | 2-4 | | **Graph Writer** | Python | 批量写入增强事件到 Neo4j | 1-2 | | **Graph Query Service** | Python + FastAPI | Neo4j 查询抽象:依赖图、通信、影响分析、爆炸半径、路径查找、Dev Console(Cypher) | 1-2 | | **Timeseries Writer** | Python | 批量写入增强事件和变更事件到 ClickHouse | 1-2 | | **Timeseries Query Service** | Python + FastAPI | ClickHouse 查询抽象:事件查询(网络、DNS、进程、文件、安全、OOM、SNI、挂载、绑定)、统计、Dev Console(SQL) | 1-2 | | **Change Detection Worker** | Python | 定期 K8s + eBPF 变更检测、熔断器、WebSocket 告警 | 1(领导者选举) | | **Inspektor Gadget** | Go + eBPF | 内核级事件捕获 | 每节点 1 个 | | **PostgreSQL** | 15+ | 用户、集群、分析配置(ACID) | 1 主 + 1 副本 | | **Neo4j** | 5.x Community | 依赖图 | 1+ | | **ClickHouse** | 23+ | 时序事件、变更事件 | 1-3 | | **Redis** | 7+ | 会话缓存、pub/sub、分布式锁 | 1 主 + 副本 | | **RabbitMQ** | 3.x | 事件路由 | 1-3 (HA) | ## 技术栈 | 层级 | 技术 | 版本 | 理由 | |-------|-----------|---------|-----------| | **数据采集** | Inspektor Gadget + eBPF | 最新 | Kubernetes 原生、零开销内核级捕获 | | **后端** | Python + FastAPI | 3.11+ / 0.100+ | 异步原生、自动 OpenAPI 文档、丰富生态 | | **前端** | React + TypeScript | 18+ / 5+ | 行业标准、基于组件、类型安全 | | **UI 框架** | Ant Design | 5+ | 企业级、60+ 组件、WCAG 合规 | | **图可视化** | React Flow (@xyflow/react) | 最新 | 交互式图表、自定义节点、18 种布局算法 | | **关系数据库** | PostgreSQL | 15+ | ACID 合规、JSONB、全文搜索 | | **图数据库** | Neo4j | 5.x | 原生图存储、Cypher 查询、快速遍历 | | **时序数据库** | ClickHouse | 23+ | 列式存储、对数十亿行的亚秒级分析 | | **缓存** | Redis | 7+ | 内存中、pub/sub、分布式锁 | | **消息队列** | RabbitMQ | 3.x | 可靠事件路由、死信队列 | | **容器** | Docker | 20.10+ | 行业标准容器化 | | **编排** | Kubernetes (EKS, GKE, AKS, OpenShift, vanilla) | 1.27+ | 云原生编排、自动扩缩容、自愈 | | **IPC** | gRPC + Protobuf | 3.x | 高性能服务间通信 | | **认证** | JWT + OAuth 2.0 | — | 无状态认证、SSO 集成 | ## 快速入门 ### 前置条件 | 要求 | 最低 | 推荐 | |------------|---------|-------------| | Kubernetes | 1.27+ | 1.29+ | | OpenShift | 4.13+ | 4.15+ | | kubectl / oc | 匹配集群版本 | 最新 | | RAM | 16 GB | 32 GB | | CPU | 4 核 | 8 核 | | 存储 | 50 GB | 200 GB SSD | | Docker(本地) | 20.10+ | 最新 | | Docker Compose(本地) | 2.0+ | 最新 | ### Docker Compose 快速开始 用于本地开发和评估: ``` git clone https://github.com/taylanbakircioglu/flowfish.git cd flowfish docker-compose up -d # 等待健康检查(1-2分钟) docker-compose ps # 访问 UI open http://localhost:3000 ``` **启动的服务:** | 服务 | 端口 | 用途 | |---------|------|---------| | Frontend | 3000 | React UI | | Backend | 8000 | FastAPI REST API | | PostgreSQL | 5432 | 关系数据库 | | Redis | 6379 | 缓存 | | ClickHouse | 8123 (HTTP), 9000 (TCP) | 时序数据库 | | Neo4j | 7474 (HTTP), 7687 (Bolt) | 图数据库 | ### Kubernetes 部署 #### 部署顺序 `deployment/kubernetes-manifests/` 中的 Kubernetes 清单已编号以指示部署顺序: ``` 01 - Namespace + RBAC 02 - RBAC (extended) 03 - ConfigMaps + Migrations 04 - Secrets 05 - PostgreSQL 06 - RabbitMQ + Redis 07 - Neo4j 08 - Backend + ClickHouse 09 - Frontend + Inspektor Gadget Config/CRDs 10 - Ingestion Service + Inspektor Gadget DaemonSet 11 - Ingress + Timeseries Writer 12 - Cluster Manager 13 - Analysis Orchestrator + Cluster Manager RBAC 14 - API Gateway 15-19 - Graph Writer, Graph Query, Timeseries Query, Change Detection Worker, Gadget Monitoring ``` #### 单命令部署 ``` kubectl apply -f deployment/kubernetes-manifests/01-namespace.yaml kubectl apply -f deployment/kubernetes-manifests/ kubectl get pods -n flowfish -w ``` #### Inspektor Gadget 的手动 RBAC 设置 ``` kubectl apply -f deployment/kubernetes-manifests/10-inspektor-gadget-rbac-cluster.yaml ``` 对于 OpenShift: ``` oc adm policy add-scc-to-user privileged -z gadget -n flowfish ``` 详见 `deployment/kubernetes-manifests/INSPEKTOR_GADGET_MANUAL_SETUP.md` 和 `OPENSHIFT_GADGET_FIX.md`。 #### 端口转发 ``` kubectl port-forward svc/frontend -n flowfish 3000:3000 kubectl port-forward svc/backend -n flowfish 8000:8000 ``` #### 生产检查清单 - [ ] 替换 `04-secrets.yaml` 中的所有默认密码 - [ ] 根据预期数据量调整 PVC 大小 - [ ] 审查每个 deployment 中的 CPU/内存限制 - [ ] 使用有效证书在 ingress 配置 TLS - [ ] 使用您的域名更新 `11-ingress.yaml` - [ ] 部署 Prometheus + Grafana 进行监控 - [ ] 配置 PostgreSQL 和 Neo4j 备份 - [ ] 将 backend 扩展到 3+ 副本 - [ ] 应用限制性网络策略 - [ ] 在所有节点上验证 Inspektor Gadget RBAC/SCC ### 默认凭证 | 服务 | 用户名 | 密码 | 备注 | |---------|----------|----------|-------| | Flowfish UI | `admin` | `admin123` | 首次登录后立即更改 | | PostgreSQL | `flowfish` | `flowfish123` | 通过 `04-secrets.yaml` | | Neo4j | `neo4j` | `flowfish123` | 通过 `04-secrets.yaml` | | ClickHouse | `flowfish` | `flowfish123` | 通过 `04-secrets.yaml` | | Redis | — | `redis123` | 通过 `04-secrets.yaml` | | RabbitMQ | `flowfish` | `flowfish123` | 通过 `04-secrets.yaml` | ## 配置 ### 后端环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `DATABASE_URL` | `postgresql://flowfish:flowfish123@postgres:5432/flowfish` | PostgreSQL 连接字符串 | | `REDIS_URL` | `redis://:redis123@redis:6379/0` | Redis 连接字符串 | | `CLICKHOUSE_URL` | `http://flowfish:flowfish123@clickhouse:8123` | ClickHouse HTTP URL | | `NEO4J_BOLT_URI` | `bolt://neo4j:7687` | Neo4j Bolt 协议 URI | | `NEO4J_USER` | `neo4j` | Neo4j 用户名 | | `NEO4J_PASSWORD` | `flowfish123` | Neo4j 密码 | | `SECRET_KEY` | `super-secret-key-change-me` | JWT 签名密钥 | | `JWT_EXPIRATION_HOURS` | `1` | JWT token 有效期 | | `CORS_ORIGINS` | `http://localhost:3000` | 允许的 CORS 源 | | `LOG_LEVEL` | `INFO` | 日志级别 | | `ENABLE_CHANGE_DETECTION` | `true` | 启用变更检测 worker | | `CHANGE_DETECTION_INTERVAL` | `60` | 变更检测间隔(秒) | ### 前端环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `REACT_APP_API_URL` | `http://localhost:8000` | 后端 API URL | | `REACT_APP_ENABLE_DARK_MODE` | `true` | 启用暗色模式切换 | ### 数据库配置 **PostgreSQL** —— 关系数据:用户、集群、分析、配置、审计日志。Schema 通过迁移作业应用。 **Neo4j** —— 依赖图。顶点类型:Cluster、Namespace、Pod、Deployment、StatefulSet、Service。边类型:COMMUNICATES_WITH、PART_OF、EXPOSES、DEPENDS_ON。 **ClickHouse** —— 时序事件:network_flows、dns_queries、tcp_connections、process_events、file_access_events、syscall_events、change_events。按日期分区。 **Redis** —— 会话缓存、指标缓存、速率限制、pub/sub、分布式锁。 **RabbitMQ** —— Ingestion Service 和写入器之间的事件路由。失败消息的死信队列。 ## API 参考 交互式文档位于 `http://localhost:8000/api/docs`(Swagger)或 `http://localhost:8000/api/redoc`(ReDoc)。 | 端点组 | 基础路径 | 描述 | |---------------|-----------|-------------| | **Auth** | `/api/v1/auth` | 登录、登出、刷新、用户信息 | | **Users** | `/api/v1/users` | 用户管理 | | **Clusters** | `/api/v1/clusters` | 集群管理、命名空间列表 | | **Analyses** | `/api/v1/analyses` | 创建、启动、停止、删除分析 | | **Dependencies** | `/api/v1/dependencies` | 图查询、上游/下游 | | **Communications** | `/api/v1/communications` | 网络流数据 | | **Changes** | `/api/v1/changes` | 变更检测事件 | | **Blast Radius** | `/api/v1/blast-radius` | 部署前评估 | | **Simulation** | `/api/v1/simulation` | 影响模拟 | | **Export** | `/api/v1/export` | 数据导出 | | **Reports** | `/api/v1/reports` | 报告生成 | | **Query** | `/api/v1/query` | 开发者控制台查询 | | **Settings** | `/api/v1/settings` | 系统配置 | ## 项目结构 ``` flowfish/ ├── backend/ # FastAPI backend application │ ├── main.py # Application entry point │ ├── routers/ # API route handlers │ ├── services/ # Business logic │ │ ├── cluster_connection_manager.py │ │ ├── change_detection/ # Detection strategies & detectors │ │ └── connections/ # Cluster connection types │ ├── database/ # DB connection helpers │ ├── workers/ # Background workers │ └── repositories/ # Data access layer ├── frontend/ # React TypeScript application │ └── src/ │ ├── pages/ # Page components │ ├── components/ # Reusable UI components │ ├── store/api/ # RTK Query API slices │ └── hooks/ # Custom React hooks ├── services/ # gRPC microservices │ ├── ingestion-service/ # Event ingestion & enrichment │ ├── graph-writer/ # Neo4j batch writer │ ├── timeseries-writer/ # ClickHouse batch writer │ ├── cluster-manager/ # K8s connection gateway │ ├── analysis-orchestrator/ # Analysis lifecycle │ ├── graph-query/ # Graph query service │ └── timeseries-query/ # Time-series query service ├── proto/ # Protocol Buffer definitions ├── schemas/ # Database schemas (SQL) ├── deployment/ │ ├── docker-compose/ # Docker Compose files │ └── kubernetes-manifests/ # K8s/OpenShift YAML manifests ├── pipelines/ # CI/CD pipeline scripts ├── scripts/ # Utility scripts ├── docs/ # Documentation & screenshots └── version.json # Version metadata ``` ## 故障排除 ### UI 无法加载 ``` kubectl logs -l app=frontend -n flowfish kubectl get svc frontend -n flowfish kubectl exec -it deploy/frontend -n flowfish -- curl -s http://backend:8000/api/v1/health ``` ### 依赖图中无数据 ``` kubectl logs -l app=backend -n flowfish | grep "analysis" kubectl get pods -n flowfish -l app=inspektor-gadget kubectl logs -l app=ingestion-service -n flowfish --tail=50 ``` ### 数据库连接问题 ``` kubectl exec -it postgresql-0 -n flowfish -- pg_isready -U flowfish kubectl exec -it neo4j-0 -n flowfish -- curl -s http://localhost:7474 kubectl exec -it clickhouse-0 -n flowfish -- wget -qO- http://localhost:8123/ping kubectl exec -it deploy/redis -n flowfish -- redis-cli -a redis123 ping ``` ### Inspektor Gadget 未启动 ``` kubectl get ds -n flowfish kubectl describe pod -l app=inspektor-gadget -n flowfish # 常见问题:缺少 RBAC → 应用 10-inspektor-gadget-rbac-cluster.yaml # OpenShift: oc adm policy add-scc-to-user privileged -z gadget -n flowfish ``` ## 贡献 1. Fork 仓库 2. 创建功能分支(`git checkout -b feature/amazing-feature`) 3. 提交更改(`git commit -m 'Add amazing feature'`) 4. 推送到分支(`git push origin feature/amazing-feature`) 5. 打开 Pull Request ### 开发设置 ``` # Backend cd backend && python -m venv venv && source venv/bin/activate pip install -r requirements.txt && uvicorn main:app --reload --port 8000 # Frontend cd frontend && npm install && npm run dev ``` ## 许可证 本项目采用 **GNU Affero General Public License v3.0 (AGPL-3.0)** 许可。有关全文,请参阅 [LICENSE](LICENSE) 文件。 简而言之:您可以自由使用、修改和分发本软件,但任何修改版本 —— 包括通过网络使用(SaaS)—— **也必须在 AGPL-3.0 下发布并提供完整源代码**。不允许作为专有产品进行商业再分发。 ## 作者 **Taylan Bakırcıoğlu** - LinkedIn: [linkedin.com/in/taylanbakircioglu](https://www.linkedin.com/in/taylanbakircioglu/) - GitHub: [@taylanbakircioglu](https://github.com/taylanbakircioglu) - Email: taylanb@outlook.com ## 支持 - **问题:** [GitHub Issues](https://github.com/taylanbakircioglu/flowfish/issues) - **讨论:** [GitHub Discussions](https://github.com/taylanbakircioglu/flowfish/discussions) **版本:** 2.3.0 | **最后更新:** 2026 年 3 月
标签:API集成, CISA项目, DevSecOps, Docker, Docker镜像, Web截图, 上游代理, 依赖映射, 变更检测, 可观测性, 多集群管理, 子域名突变, 安全防御评估, 审计, 容器安全, 密码管理, 平台工程, 影响分析, 性能分析, 拓扑图, 提示词模板, 插件系统, 搜索引擎查询, 服务网格, 测试用例, 爆破半径分析, 网络安全, 逆向工具, 隐私保护