cilium/hubble

GitHub: cilium/hubble

Hubble 是一个基于 Cilium 和 eBPF 构建的 Kubernetes 网络、服务与安全可观测性平台。

Stars: 4148 | Forks: 282

Hubble Logo [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) # Kubernetes 的网络、服务与安全可观测性 - [什么是 Hubble?](#what-is-hubble) - [快速入门](#getting-started) - [功能](#features) - [服务依赖图](#service-dependency-graph) - [指标与监控](#metrics--monitoring) - [流量可见性](#flow-visibility) - [取得联系 / 社区](#community) - [作者](#authors) # 什么是 Hubble? Hubble 是一个完全分布式的网络和安全可观测性平台, 专为云原生工作负载构建。它基于 [Cilium] 和 [eBPF] 构建,能够 以完全透明的方式深入了解服务的通信和行为以及 网络基础设施。 Hubble 可以回答如下问题: **服务依赖与通信图:** * 哪些服务正在相互通信?频率如何?服务 依赖图是什么样的? * 发起了哪些 HTTP 调用?服务消费或生产 哪些 Kafka 主题? **运维监控与告警:** * 是否有任何网络通信失败?通信为何失败?是 DNS 问题吗?是应用程序还是网络问题?通信中断发生在 第 4 层 (TCP) 还是第 7 层 (HTTP)? * 在过去 5 分钟内哪些服务遇到了 DNS 解析问题?哪些服务最近经历了 TCP 连接中断或连接超时?未响应的 TCP SYN 请求的速率是多少? **应用监控:** * 特定服务或所有集群中 HTTP 响应代码为 5xx 或 4xx 的速率是多少? * 集群中 HTTP 请求与响应的第 95 和 99 百分位延迟是多少?哪些服务性能最差?两个服务 之间的延迟是多少? **安全可观测性:** * 哪些服务由于网络策略导致连接被阻止?哪些服务 从集群外部被访问?哪些服务解析了特定的 DNS 名称? ## 为什么选择 Hubble? Linux 内核技术 [eBPF] 使得以前无法达到的粒度和效率来观察系统 和应用程序成为可能。它以完全透明的方式实现这一点,而无需应用程序 进行更改或应用程序隐藏信息。通过在 [Cilium] 之上构建,Hubble 可以利用 [eBPF] 实现可见性。通过利用 [eBPF],所有 可见性都是可编程的,并允许采用动态方法,在需要时提供深度和详细的洞察,同时最大限度地减少开销。Hubble 的创建和专门设计旨在充分利用这些新的 [eBPF] 能力。 ## 版本发布 Hubble CLI 与所有受支持的 Cilium 版本向后兼容。由于 这个原因,仅维护最新的 Hubble CLI 版本。 | 版本 | 发布日期 | 是否维护 | 支持的 Cilium 版本 | 构件 | |-----------------------------------------------------|----------------------|----------|------------------------|------------------------------------------------------------------------| | [v1.18](https://github.com/cilium/hubble/tree/main) | 2026-02-03 (v1.18.6) | 是 | Cilium 1.18 及更早版本 | [GitHub Release](https://github.com/cilium/hubble/releases/tag/v1.18.6) | ## 组件稳定性 Hubble 项目由多个组件组成(请参阅架构部分)。 虽然核心 Hubble 组件已经在多个环境中投入生产 运行,但随着项目的增长和范围 扩大,新组件不断涌现。 由于某些组件相对较新,仍被视为 Beta 版本,在关键生产工作负载中使用时必须谨慎。 | 组件 | 领域 | 状态 | |--------------|----------|--------| | Hubble CLI | 核心 | Stable | | Hubble Server| 核心 | Stable | | Hubble Metrics| 核心 | Stable | | Hubble Relay | 多节点 | Stable | | Hubble UI | UI | Beta | ## 架构 ![Hubble Architecture](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e085e08556053717.png) # 快速入门 * [Cilium & Hubble 简介](https://docs.cilium.io/en/stable/overview/intro/) * [使用 Hubble 进行网络和安全可观测性](https://docs.cilium.io/en/stable/gettingstarted/hubble/) # 功能 ## 服务依赖图 排查微服务应用连接性是一项具有挑战性的任务。 仅仅查看 "kubectl get pods" 并不能表明每个服务与 外部 API 或数据库之间的依赖关系。 Hubble 能够为 Kubernetes 集群在 L3/L4 甚至 L7 层面实现零成本的自动服务依赖图发现, 允许用户友好地可视化和过滤这些数据流(作为 Service Map)。 请参阅 [Hubble Service Map 教程](https://docs.cilium.io/en/stable/gettingstarted/hubble/) 以获取更多示例。 ![Service Map](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/adf0ddefb4053718.png) ## 指标与监控 指标和监控功能提供了系统状态的概述, 并允许识别指示故障和其他需要操作的场景的模式。以下是示例指标的简短列表, 有关更详细的示例列表,请参阅 [指标文档](https://docs.cilium.io/en/stable/observability/metrics/)。 ### 网络行为 ![Networking](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5a4663661e053719.png) ### 网络策略观察 ![Network Policy](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/36fc7dd4e2053720.png) ### HTTP 请求/响应速率与延迟 ![HTTP](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c58c772ab1053722.png) ### DNS 请求/响应监控 ![DNS](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/219f95c7c1053723.png) ## 流量可见性 流量可见性提供了网络和 应用协议层面的流量信息可见性。这使得能够深入了解单个 TCP 连接、DNS 查询、HTTP 请求、Kafka 通信等等。 ### DNS 解析 识别收到指示失败的 DNS 响应的 Pod: ``` hubble observe --since=1m -t l7 -o json \ | jq 'select(.l7.dns.rcode==3) | .destination.namespace + "/" + .destination.pod_name' \ | sort | uniq -c | sort -r 42 "starwars/jar-jar-binks-6f5847c97c-qmggv" ``` *成功的查询与响应:* ``` starwars/x-wing-bd86d75c5-njv8k kube-system/coredns-5c98db65d4-twwdg DNS Query deathstar.starwars.svc.cluster.local. A kube-system/coredns-5c98db65d4-twwdg starwars/x-wing-bd86d75c5-njv8k DNS Answer "10.110.126.213" TTL: 3 (Query deathstar.starwars.svc.cluster.local. A) ``` *不存在的域:* ``` starwars/jar-jar-binks-789c4b695d-ltrzm kube-system/coredns-5c98db65d4-f4m8n DNS Query unknown-galaxy.svc.cluster.local. A starwars/jar-jar-binks-789c4b695d-ltrzm kube-system/coredns-5c98db65d4-f4m8n DNS Query unknown-galaxy.svc.cluster.local. AAAA kube-system/coredns-5c98db65d4-twwdg starwars/jar-jar-binks-789c4b695d-ltrzm DNS Answer RCode: Non-Existent Domain TTL: 4294967295 (Query unknown-galaxy.starwars.svc.cluster.local. A) kube-system/coredns-5c98db65d4-twwdg starwars/jar-jar-binks-789c4b695d-ltrzm DNS Answer RCode: Non-Existent Domain TTL: 4294967295 (Query unknown-galaxy.starwars.svc.cluster.local. AAAA) ``` ### HTTP 协议 *带有延迟信息的成功请求与响应:* ``` starwars/x-wing-bd86d75c5-njv8k:53410 starwars/deathstar-695d8f7ddc-lvj84:80 HTTP/1.1 GET http://deathstar/ starwars/deathstar-695d8f7ddc-lvj84:80 starwars/x-wing-bd86d75c5-njv8k:53410 HTTP/1.1 200 1ms (GET http://deathstar/) ``` ### TCP/UDP 数据包 *成功的 TCP 连接:* ``` starwars/x-wing-bd86d75c5-njv8k:53410 starwars/deathstar-695d8f7ddc-lvj84:80 TCP Flags: SYN deathstar.starwars.svc.cluster.local:80 starwars/x-wing-bd86d75c5-njv8k:53410 TCP Flags: SYN, ACK starwars/x-wing-bd86d75c5-njv8k:53410 starwars/deathstar-695d8f7ddc-lvj84:80 TCP Flags: ACK, FIN deathstar.starwars.svc.cluster.local:80 starwars/x-wing-bd86d75c5-njv8k:53410 TCP Flags: ACK, FIN ``` *连接超时:* ``` starwars/r2d2-6694d57947-xwhtz:60948 deathstar.starwars.svc.cluster.local:8080 TCP Flags: SYN starwars/r2d2-6694d57947-xwhtz:60948 deathstar.starwars.svc.cluster.local:8080 TCP Flags: SYN starwars/r2d2-6694d57947-xwhtz:60948 deathstar.starwars.svc.cluster.local:8080 TCP Flags: SYN ``` ### 网络策略行为 *被拒绝的连接尝试:* ``` starwars/enterprise-5775b56c4b-thtwl:37800 starwars/deathstar-695d8f7ddc-lvj84:80(http) Policy denied (L3) TCP Flags: SYN starwars/enterprise-5775b56c4b-thtwl:37800 starwars/deathstar-695d8f7ddc-lvj84:80(http) Policy denied (L3) TCP Flags: SYN starwars/enterprise-5775b56c4b-thtwl:37800 starwars/deathstar-695d8f7ddc-lvj84:80(http) Policy denied (L3) TCP Flags: SYN ``` ### 指定原始流量过滤器 Hubble 支持广泛的过滤选项集,可以指定为允许列表 和拒绝列表的组合。Hubble 应用这些过滤器的方式如下: ``` for each flow: if flow does not match any of the allowlist filters: continue if flow matches any of the denylist filters: continue send flow to client ``` 您可以将这些过滤器作为 [JSON 编码](https://developers.google.com/protocol-buffers/docs/proto3#json) 的 [FlowFilters](https://github.com/cilium/cilium/blob/v1.10.5/api/v1/flow/flow.proto#L348) 传递给 `hubble observe` 命令。例如,要观察符合以下条件的流量: - 源或目标身份包含 `k8s:io.kubernetes.pod.namespace=kube-system` 或 `reserved:host` 标签,并且 - 源或目标身份均不包含 `k8s:k8s-app=kube-dns` 标签: hubble observe \ --allowlist '{"source_label":["k8s:io.kubernetes.pod.namespace=kube-system","reserved:host"]}' \ --allowlist '{"destination_label":["k8s:io.kubernetes.pod.namespace=kube-system","reserved:host"]}' \ --denylist '{"source_label":["k8s:k8s-app=kube-dns"]}' \ --denylist '{"destination_label":["k8s:k8s-app=kube-dns"]}' 或者,您也可以将这些标志指定为 `HUBBLE_{ALLOWLIST,DENYLIST}` 环境变量: ``` cat > allowlist.txt < denylist.txt < filters.yaml % hubble observe --config ./filters.yaml ``` # 作者 Hubble 是一个基于 [Apache License] 许可的开源项目。欢迎所有人 做出贡献。该项目遵循 [Cilium] 项目的 [Governance Rules]。有关如何贡献 的说明和行为准则的详细信息,请参阅 [CONTRIBUTING]。
标签:Apache 2.0, API集成, APM, Cilium, DNS监控, Docker镜像, HTTP监控, Kafka, NPM, SonarQube插件, TCP分析, 分布式追踪, 可观测性, 子域名突变, 开源, 日志审计, 服务依赖图, 流量可视化, 系统分析, 网络分析, 网络故障排查, 自定义请求头, 零信任网络