mental-lab/grumble

GitHub: mental-lab/grumble

基于 Grype 的轻量级多集群容器漏洞扫描系统,通过 Agent 架构汇聚各集群扫描结果并提供热点评分和 Grafana 可视化。

Stars: 1 | Forks: 0

# grumble Grumble 是一个轻量级的多集群容器漏洞扫描系统。它在每个 Kubernetes 集群中运行一个小型 agent,用于监控运行中的工作负载,使用 [Grype](https://github.com/anchore/grype) 扫描镜像,并将结果流式传输到中央服务器——为您提供跨所有集群的单点热点视图。 ## 架构 ``` [Cluster A] grumble-agent ──────────────────────────────→ gRPC (outbound) grumble-server [Cluster B] ├── SQLite / Postgres grumble-agent ──────────────────────────────→ ├── HTTP API └── Grafana dashboard [Cluster C] grumble-agent ──────────────────────────────→ ``` **关键设计决策(受 GitLab KAS 启发):** - Agent 发起出站 gRPC 连接——无需入站防火墙规则 - 可在 NAT、跨云和离线环境中工作 - 双向流式传输——服务器可以向 agent 推送配置更改 - 重连时采用带抖动的指数退避策略 ## 组件 | 组件 | 描述 | |---|---| | `grumble-agent` | 集群内 agent:监控 pod,使用 Grype 扫描镜像,流式传输结果 | | `grumble-server` | 中央聚合服务器:接收结果,暴露 HTTP API 供 Grafana 使用 | ## 热点评分 Grumble 通过 **风险 × 影响范围** 对镜像进行评分: ``` risk_score = (critical × 10 + high × 3 + medium) × pod_count ``` 1 个 pod 中的严重 CVE 的评分会低于跨 10 个团队在 200 个 pod 中运行的高危 CVE。这能揭示哪些问题真正需要优先修复。 ## 快速开始 ### 运行服务器 ``` go run ./cmd/server --grpc-addr=:9090 --http-addr=:8080 --db=/data/grumble.db ``` ### 运行 agent(使用 kubeconfig) ``` go run ./cmd/agent \ --cluster-id=prod-us-east \ --server=grumble-server:9090 \ --kubeconfig=~/.kube/config ``` ### 部署到 Kubernetes(通过 Helm) ``` # 将 agent 部署到每个集群 helm install grumble-agent ./deploy/helm/agent \ --set agent.clusterID=prod-us-east \ --set agent.serverAddr=grumble.example.com:9090 ``` ## 构建 ``` # 从 proto 生成 gRPC 代码 make proto # 构建 binaries make build # 运行测试 make test ``` ## 容器镜像 每次推送到 `main` 分支以及打版本标签时,镜像都会自动发布到 [GitHub Container Registry](https://ghcr.io/mental-lab/grumble-agent)。 | 标签 | 时机 | |-----|------| | `sha-` | 每次推送到 `main` | | `v1.2.3` | 在 git 标签 `v1.2.3` 时 | | `1.2` | 在 git 标签 `v1.2.x` 时 | 每个镜像都会在 CI 中使用 [Grype](https://github.com/anchore/grype) 进行扫描。如果发现严重 CVE,构建将失败。扫描结果会上传到 GitHub Security → Code scanning。 **本地构建:** ``` make docker-agent # 生成 grumble-agent:latest ``` **部署到集群:** ``` # 1. 确保 image 可用(已构建并推送,或已加载到你的集群中) # 2. 通过 Helm 安装 helm install grumble-agent ./deploy/helm/agent \ --set agent.clusterID=prod-us-east \ --set agent.serverAddr=grumble.example.com:9090 \ --set image.repository=ghcr.io/mental-lab/grumble-agent \ --set image.tag=main ``` 对于本地开发集群(例如 Rancher Desktop / k3s): ``` # 直接构建并导入 — 无需 registry docker build -f deploy/Dockerfile.agent -t grumble-agent:dev . # 对于 k3s:导入到 containerd docker save grumble-agent:dev | sudo k3s ctr images import - helm install grumble-agent ./deploy/helm/agent \ --set agent.clusterID=local \ --set agent.serverAddr=grumble-server:9090 \ --set image.repository=grumble-agent \ --set image.tag=dev \ --set image.pullPolicy=Never ``` ## Grafana 将 [JSON API 数据源](https://grafana.com/grafana/plugins/marcusolsson-json-datasource/) 指向您的 grumble-server HTTP 地址。 可用端点: - `GET /hotspots` — 按风险评分(严重 CVE × pod 数量)排名的镜像 - `GET /clusters` — 各集群摘要 - `GET /inventory?cluster=` — 某集群的 pod 清单 image ## 名称 Grumble 向 [Grype](https://github.com/anchore/grype) 致敬。当它发现您的集群中存在漏洞时,它会发出响亮的“抱怨”(grumble)。
标签:Angular, Chrome Headless, CI/CD安全, CISA项目, Claude, CVE检测, DevSecOps, EVTX分析, Go语言, Grafana, gRPC通信, Grype, Kubernetes代理, Kubernetes安全, Llama, PostgreSQL, Python工具, SQLite, Web截图, 上游代理, 加密, 多集群管理, 子域名突变, 安全合规, 容器安全, 微服务安全, 日志审计, 测试用例, 漏洞扫描器, 热点分析, 程序破解, 网络代理, 网络连接安全, 请求拦截, 风险评分