cilium/hubble
GitHub: cilium/hubble
Hubble 是一个基于 Cilium 和 eBPF 构建的 Kubernetes 网络、服务与安全可观测性平台。
Stars: 4148 | Forks: 282
[](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 |
## 架构

# 快速入门
* [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/)
以获取更多示例。

## 指标与监控
指标和监控功能提供了系统状态的概述,
并允许识别指示故障和其他需要操作的场景的模式。以下是示例指标的简短列表,
有关更详细的示例列表,请参阅
[指标文档](https://docs.cilium.io/en/stable/observability/metrics/)。
### 网络行为

### 网络策略观察

### HTTP 请求/响应速率与延迟

### DNS 请求/响应监控

## 流量可见性
流量可见性提供了网络和
应用协议层面的流量信息可见性。这使得能够深入了解单个 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分析, 分布式追踪, 可观测性, 子域名突变, 开源, 日志审计, 服务依赖图, 流量可视化, 系统分析, 网络分析, 网络故障排查, 自定义请求头, 零信任网络