Skip to content

Hubble UI 流量星图:上帝视角的抓包雷达

🌱 创建: 2026/04/15 ⏱️ 更新: 2026/05/22

This content is not available in your language yet.

如果说 Headlamp 是你的“算力大屏”,Portainer 是你的“集装箱扳手”,那么 Hubble UI 就是赛博堡垒里最硬核的**“全息网络高射炮雷达”**。

它直接挂载在底层的 Cilium 引擎上,利用 eBPF 技术,能在不修改任何业务代码、不增加任何网络延迟的情况下,把集群里每个 Pod 之间“谁跟谁说了话”、“谁拒绝了谁”、“谁在偷偷往外网发包”扒得干干净净。

Hubble 是 Cilium 的好兄弟,专注于网络可观测性。

  • Hubble Relay:负责从各个节点的 Cilium Agent 收集原始的网络流(Flows)。
  • Hubble UI:把这些枯燥的流数据,渲染成极具科幻感的“星系连线图”。

2. 官方的“后门”与咱们的“正门”

Section titled “2. 官方的“后门”与咱们的“正门””

官方文档里教的访问方式是 cilium hubble ui,这会在你的电脑终端里挂起一个本地的端口转发(localhost:12000)。这对于偶尔调试还行,但作为成熟的赛博工地,每次看图纸还得开个黑框框挂机?太低级了! 我们将直接打通 LB(LoadBalancer),给它分配专属的 10.0.10.51,让你随时随地掏出平板就能“监视”集群。



我们使用 Cilium CLI 来无痛唤醒这个沉睡的组件。

  1. 一键开启 Hubble UI 模块

    在 Master 节点上直接执行以下命令:

    Terminal window
    cilium hubble enable --ui
  2. 确认雷达已升空

    检查相关的 Pod 是否已经跑起来了:

    Terminal window
    kubectl get pods -n kube-system | grep hubble

    期望看到 hubble-relayhubble-ui 都处于 Running 状态。


🧪 接入点改造:分配专属静态 IP

Section titled “🧪 接入点改造:分配专属静态 IP”

默认情况下,Hubble UI 只有一个内部的 ClusterIP 服务。我们要给它套上 Cilium 的 LoadBalancer,强行把它拉到 10.0.10.x 的大局域网里。

  1. 编写发牌图纸 hubble-ui-lb.yaml

    我们新建一个独立对外的 Service,不破坏它原本的配置:

    hubble-ui-lb.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: hubble-ui-lb
    namespace: kube-system
    annotations:
    # 🎯 赛博发牌员的指令:强制要求分配 10.0.10.51. 这里修改为你自己的ip
    io.cilium/lb-ipam-ips: "10.0.10.51"
    spec:
    type: LoadBalancer
    selector:
    k8s-app: hubble-ui
    ports:
    - name: http
    port: 80
    targetPort: 8081
  2. 执行打通指令

    Terminal window
    kubectl apply -f hubble-ui-lb.yaml
  3. 验收发牌结果

    Terminal window
    kubectl get svc hubble-ui-lb -n kube-system

    确认 EXTERNAL-IP 已经成功分配为 10.0.10.51,且暴露了 80 端口。


现在,抛弃官方那个憋屈的 localhost 吧!直接在浏览器输入你的专属监控地址: 👉 http://10.0.10.51

进入页面后,在左上角的 Namespace 下拉菜单里,选择 kube-system 或者 portainer,你就能看到节点之间的连线了。

🔫 实战演习:主动制造“网络火拼”

Section titled “🔫 实战演习:主动制造“网络火拼””

如果你的集群刚建好,页面上可能空空荡荡(没有流量就没有连线)。我们可以借用官方的测试脚本,主动制造一批错综复杂的网络请求来“点亮”星图。

在主节点上执行这个死循环测试(放心,随时可以 Ctrl+C 掐断):

Terminal window
while true; do cilium connectivity test; done

此时回到 Hubble UI 页面,把左上角的命名空间切换到刚刚生成的 cilium-test: 你会瞬间看到满屏绿色的(Forwarded)和红色的(Dropped)激光线条,配合底部实时滚动的抓包日志(五元组、HTTP L7 信息),这就是 云原生时代的网络全知视角


[Q] 为什么连线图里会有一个叫 reserved:world 的节点? [A]: 在 Cilium 的世界观里,world 代表的是集群外部的互联网。如果你的 Portainer 尝试去 Github 拉取模板,或者 Headlamp 在检测版本更新,Hubble 就会画一条线指向 world。点击底部的日志,你甚至能清楚看到它们访问了哪个公网 IP 的 443 端口。

[Q] 页面提示 No data available,但我的应用明明在跑? [A]: Hubble UI 默认只展示最近几分钟的实时流量。如果你的应用只是安静地挂在后台没有任何请求,星图上是不会画线的。尝试自己刷新一下应用的网页,连线马上就会冒出来。