4、Hubble CLI入门:hubble observe命令基础、过滤条件、输出格式、实时流与历史回放

Hubble CLI 是 Hubble 组件提供的命令行工具,用于从 Cilium 的 eBPF 数据路径中实时或历史地查询网络流量。核心命令 hubble observe 是日常运维中查看容器网络通信、诊断连通性、分析策略命中情况的主要入口。本章将系统讲解该命令的基础用法、过滤机制、输出控制以及两种工作模式。

4.1 命令基础与连接模式

hubble observe 默认通过 Unix Socket 连接到本地节点的 Hubble 服务。在 Kubernetes 环境中,通常需要先通过 hubble port-forward 或直接指定 --server 参数连接到 Hubble Relay。

连接方式对比:
  • 本地节点(默认): 直接查看当前节点的流量,无需额外参数。
  • Hubble Relay(集群级): 使用 hubble observe --server localhost:4245 或通过 hubble port-forward 建立的隧道,可查看整个集群的流量。
# 查看当前节点所有流量(默认输出)
hubble observe

# 通过 Hubble Relay 查看集群流量
hubble observe --server localhost:4245

# 查看帮助信息
hubble observe --help

4.2 过滤条件:精准定位目标流量

Hubble 支持丰富的过滤表达式,允许运维人员从海量数据中快速定位特定 Pod、Service、协议或策略相关的流量。过滤条件通过 --filter 或简写 -f 指定,支持多次叠加使用。

过滤类型 示例 说明
Pod 名称 --pod frontend-xxx 匹配源或目的 Pod 名称(支持前缀匹配)
命名空间 --namespace production 仅显示指定命名空间的流量
IP 地址 --ip 10.0.0.5 匹配源或目的 IP
L4 端口 --port 8080 匹配源或目的端口
传输协议 --protocol TCP 过滤 TCP/UDP/ICMP 等协议
HTTP 方法 --http-method GET 仅显示特定 HTTP 方法的请求(需启用 L7 可见性)
HTTP 路径 --http-path /api/v1/* 按 URL 路径模式匹配
策略判定 --verdict DROPPED 显示被网络策略丢弃的流量
标签 --label k8s:app=nginx 按 Kubernetes 标签过滤
组合过滤技巧: 多个过滤条件之间是 AND 关系。例如 hubble observe --namespace production --port 443 --verdict FORWARDED 仅显示 production 命名空间中端口 443 上被允许的流量。
# 查看被网络策略丢弃的流量
hubble observe --verdict DROPPED

# 查看 frontend 命名空间到 backend 服务的 HTTP 请求
hubble observe --from-namespace frontend --to-namespace backend --protocol HTTP

# 查看特定 Pod 的 TCP 流量
hubble observe --pod nginx-7fb7c96b6b-j4k2p --protocol TCP

4.3 输出格式:控制显示内容与样式

Hubble 提供多种输出格式,满足不同场景需求:终端查看、日志归档、JSON 解析等。

格式参数 说明 典型用途
--output json 输出 JSON 格式,包含所有字段 程序化处理、日志存储
--output jsonpb Protocol Buffers JSON 格式 与 Hubble API 数据结构一致
--output dict 键值对格式,每行一个字段 快速查看关键字段
--output compact 紧凑单行格式 高密度终端输出
默认(表格) 表格形式,显示时间、源、目的、协议、策略判定等 日常人工查看
# JSON 格式输出,便于 jq 处理
hubble observe --output json | jq '.ip.source'

# 紧凑格式,适合在窄终端中滚动查看
hubble observe --output compact

# 自定义字段输出(通过 Hubble CLI 的 --print 参数)
hubble observe --print flow --print node-name

4.4 实时流与历史回放

Hubble 支持两种工作模式:实时流模式持续监听新产生的流量事件;历史回放模式则从 Hubble 的环形缓冲区中检索已记录的数据包。

Hubble observe 两种工作模式 实时流模式(默认) 持续监听 eBPF 事件 无参数或 --follow 适合:实时故障排查 历史回放模式 从环形缓冲区检索 使用 --last 或 --since/--until 适合:事后审计与取证 切换 关键参数说明 --last N:显示最近 N 条记录(如 --last 100) --since 1h:显示过去 1 小时的记录 --until 2024-01-01T00:00:00Z:指定结束时间

4.5 实战示例:准入策略评审中的流量取证

在容器网络运维中,准入策略评审需要验证新策略是否生效、是否有意外阻断或放行。以下示例展示如何使用 Hubble CLI 进行策略生效前后的流量对比。

场景: 评审一条禁止 frontend 命名空间访问 backend 命名空间 3306 端口的网络策略。
# 步骤1:策略生效前,查看正常流量
hubble observe --from-namespace frontend --to-namespace backend --port 3306 --last 50

# 步骤2:应用网络策略后,查看被丢弃的流量
hubble observe --from-namespace frontend --to-namespace backend --port 3306 --verdict DROPPED

# 步骤3:确认策略是否完全阻断(无 FORWARDED 流量)
hubble observe --from-namespace frontend --to-namespace backend --port 3306 --verdict FORWARDED --last 10

# 步骤4:导出 JSON 格式用于审计记录
hubble observe --from-namespace frontend --to-namespace backend --port 3306 --since 10m --output json > policy-audit.json
注意事项:
  • 历史回放依赖 Hubble 环形缓冲区的大小配置(默认 1GB),超出容量的事件会被覆盖。
  • 实时流模式在集群规模较大时可能产生大量输出,建议配合精确过滤条件使用。
  • L7 过滤(HTTP 方法、路径)需要 Pod 上启用 L7 可见性注解,否则不会显示。

4.6 常用命令速查表

命令 用途
hubble observe --follow 持续实时监控流量(类似 tcpdump)
hubble observe --last 200 查看最近 200 条流量记录
hubble observe --since 30m 查看过去 30 分钟的历史流量
hubble observe --verdict DROPPED --output json 导出被丢弃流量的 JSON 日志
hubble observe --http-path /healthz 过滤特定 HTTP 健康检查路径
hubble observe --label k8s:app=nginx 按应用标签过滤流量

掌握 hubble observe 的过滤与输出能力,是进行容器网络准入策略评审的基础。通过实时流快速定位问题,通过历史回放完成合规审计,Hubble CLI 为运维人员提供了从观察到取证的完整工具链。