在Kubernetes环境中进行网络故障排除,您是否感到非常困难?
传统的tcpdump在Pod IP频繁变化的环境中进行追踪非常困难。但是,如果您正在使用Cilium作为CNI,那么我们有一个强大的工具叫做Hubble。
Hubble是一个基于Kubernetes资源(Pod、Service、Namespace)直观展示网络流的可观测性工具。今天,我们将详细整理Hubble CLI的主要命令和实用技巧,您可以立即在实际工作中应用。🚀

1. 实时网络流观测: hubble observe 📡
这是Hubble最核心的功能。它允许您实时查看当前集群中发生的包流(Flow)。最大的优点是能够通过服务名称或Pod名称而不是IP地址来追踪通信。
📍 基本用法
不带任何选项运行,将查询当前时间点所有命名空间的流量。
hubble observe
📍 实时监控 (Follow 模式)
如果您想像使用tail -f查看日志一样,持续实时查看网络流量,请使用-f选项。
hubble observe -f
📍 必备过滤选项 (最佳实践)
这是从数万个数据包洪流中精确提取所需信息的方法。
- 指定特定的Pod和命名空间
- 仅查看特定命名空间(-n)中与特定Pod(–pod)相关的流量。
hubble observe --pod my-web-server -n default- 安全审计: 仅查看被阻止的流量 (–verdict) 🔥
- 这对于筛选出被网络策略(NetworkPolicy)阻止的数据包非常有用。对于安全负责人来说,这是必备命令!
hubble observe --verdict DROPPED # 仅查询被防火墙阻止的数据包
hubble observe --verdict FORWARDED # 仅查询正常允许的数据包
- 按对方(源/目标)进行过滤
- 用于查找“谁正在尝试连接到kube-system?”
hubble observe --to-namespace kube-system # 如果目的地是kube-system
hubble observe --from-pod landing-page # 如果源是landing-page Pod
- 协议和端口过滤:
hubble observe --protocol tcp --port 80
📍 更改输出格式 (-o)
在编写自动化脚本或需要查看更详细信息时,可以更改格式。
hubble observe -o compact # (默认) 易于阅读的摘要信息
hubble observe -o json # 包含所有元数据的JSON输出 (用于详细分析)
2. 状态和连接检查: hubble status 🏥
检查Hubble服务器(Relay)和代理是否正常运行。
hubble status
输出示例解释:
- Health: 与Hubble Relay的连接状态
- Peer Service: 与集群中其他节点的连接状态
- Flows/s: 当前每秒收集的数据包流数量 (用于检查负载)
3. 资源和标识符查询: hubble list 🆔
Cilium在内部使用Identity(数字ID)而非IP来管理安全策略。这用于检查ID映射到哪个Pod或标签。
- Identity 查询:
hubble list identities
检查哪些标签映射到哪些数字ID。
- Endpoint 查询:
hubble list endpoints
检查当前正在监控的Pod(Endpoint)列表和状态。
4. 可视化仪表板: hubble ui 🖥️
当您不熟悉CLI或想查看服务之间的整体拓扑图(Service Map)时,可以运行Web UI。
执行此命令会将端口转发到您的本地主机,允许您在Web浏览器中以图形方式查看服务之间的连接关系。(这对于理解MSA结构非常有用!)
hubble ui
💡 专家故障排除场景 (提示)
如何使用Hubble解决实际工作中常见的问题。
✅ 场景 1: “服务突然无法连接!” (网络策略调试)
这是最常见的情况。检查最近5秒内是否有被阻止(DROPPED)的数据包。
hubble observe --verdict DROPPED --last 5s
Tip: 如果结果显示“Policy denied”,则表示网络策略正在阻止流量。
✅ 场景 2: “出现HTTP 500错误,但来自哪个路径?” (L7 可见性)
如果启用了Cilium的L7可见性功能,您不仅可以看到简单的TCP连接,还可以看到HTTP方法和路径。
hubble observe --protocol http --port 80 -f
您可以立即在输出结果中看到类似“GET /api/v1/users => 500”的日志。
✅ 场景 3: “我想知道被阻止的具体原因” (使用 JSON + jq)
不仅仅是查看列表,而是解析并查看具体的丢弃原因(Reason)。
hubble observe --verdict DROPPED -o json | jq '.flow.drop_reason_desc'
📝 总结
Hubble是一个强大的工具,它使Kubernetes网络的黑盒变得透明。它不仅可以检查连接,还可以进行安全审计、应用程序调试和结构理解。请务必掌握这些命令并在实际工作中应用它们!👍
如果这有帮助,请点赞!如有任何疑问,请在评论中留言。
发表回复