[Cilium] 🔭 Kubernetes网络的“眼睛”,Hubble CLI命令完整指南

在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网络的黑盒变得透明。它不仅可以检查连接,还可以进行安全审计、应用程序调试和结构理解。请务必掌握这些命令并在实际工作中应用它们!👍

如果这有帮助,请点赞!如有任何疑问,请在评论中留言。



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注