Hubble UI 流量星图:上帝视角的抓包雷达
This content is not available in your language yet.
如果说 Headlamp 是你的“算力大屏”,Portainer 是你的“集装箱扳手”,那么 Hubble UI 就是赛博堡垒里最硬核的**“全息网络高射炮雷达”**。
它直接挂载在底层的 Cilium 引擎上,利用 eBPF 技术,能在不修改任何业务代码、不增加任何网络延迟的情况下,把集群里每个 Pod 之间“谁跟谁说了话”、“谁拒绝了谁”、“谁在偷偷往外网发包”扒得干干净净。
💡 认识工程组件
Section titled “💡 认识工程组件”1. 什么是 Hubble?
Section titled “1. 什么是 Hubble?”Hubble 是 Cilium 的好兄弟,专注于网络可观测性。
- Hubble Relay:负责从各个节点的 Cilium Agent 收集原始的网络流(Flows)。
- Hubble UI:把这些枯燥的流数据,渲染成极具科幻感的“星系连线图”。
2. 官方的“后门”与咱们的“正门”
Section titled “2. 官方的“后门”与咱们的“正门””官方文档里教的访问方式是 cilium hubble ui,这会在你的电脑终端里挂起一个本地的端口转发(localhost:12000)。这对于偶尔调试还行,但作为成熟的赛博工地,每次看图纸还得开个黑框框挂机?太低级了!
我们将直接打通 LB(LoadBalancer),给它分配专属的 10.0.10.51,让你随时随地掏出平板就能“监视”集群。
📜 官方蓝图 (Official Resources)
Section titled “📜 官方蓝图 (Official Resources)”- 🔭 Hubble 官方部署指南:Service Map & Hubble UI
🏗️ 核心施工:唤醒雷达阵列
Section titled “🏗️ 核心施工:唤醒雷达阵列”我们使用 Cilium CLI 来无痛唤醒这个沉睡的组件。
-
一键开启 Hubble UI 模块
在 Master 节点上直接执行以下命令:
Terminal window cilium hubble enable --ui -
确认雷达已升空
检查相关的 Pod 是否已经跑起来了:
Terminal window kubectl get pods -n kube-system | grep hubble期望看到
hubble-relay和hubble-ui都处于 Running 状态。
🧪 接入点改造:分配专属静态 IP
Section titled “🧪 接入点改造:分配专属静态 IP”默认情况下,Hubble UI 只有一个内部的 ClusterIP 服务。我们要给它套上 Cilium 的 LoadBalancer,强行把它拉到 10.0.10.x 的大局域网里。
-
编写发牌图纸
hubble-ui-lb.yaml我们新建一个独立对外的 Service,不破坏它原本的配置:
hubble-ui-lb.yaml apiVersion: v1kind: Servicemetadata:name: hubble-ui-lbnamespace: kube-systemannotations:# 🎯 赛博发牌员的指令:强制要求分配 10.0.10.51. 这里修改为你自己的ipio.cilium/lb-ipam-ips: "10.0.10.51"spec:type: LoadBalancerselector:k8s-app: hubble-uiports:- name: httpport: 80targetPort: 8081 -
执行打通指令
Terminal window kubectl apply -f hubble-ui-lb.yaml -
验收发牌结果
Terminal window kubectl get svc hubble-ui-lb -n kube-system确认 EXTERNAL-IP 已经成功分配为
10.0.10.51,且暴露了 80 端口。
🌌 登堂入室:观测流量星图
Section titled “🌌 登堂入室:观测流量星图”现在,抛弃官方那个憋屈的 localhost 吧!直接在浏览器输入你的专属监控地址: 👉 http://10.0.10.51
进入页面后,在左上角的 Namespace 下拉菜单里,选择 kube-system 或者 portainer,你就能看到节点之间的连线了。
🔫 实战演习:主动制造“网络火拼”
Section titled “🔫 实战演习:主动制造“网络火拼””如果你的集群刚建好,页面上可能空空荡荡(没有流量就没有连线)。我们可以借用官方的测试脚本,主动制造一批错综复杂的网络请求来“点亮”星图。
在主节点上执行这个死循环测试(放心,随时可以 Ctrl+C 掐断):
while true; do cilium connectivity test; done此时回到 Hubble UI 页面,把左上角的命名空间切换到刚刚生成的 cilium-test:
你会瞬间看到满屏绿色的(Forwarded)和红色的(Dropped)激光线条,配合底部实时滚动的抓包日志(五元组、HTTP L7 信息),这就是 云原生时代的网络全知视角!
❓ 常见问题与解答 (Q & A)
Section titled “❓ 常见问题与解答 (Q & A)”[Q] 为什么连线图里会有一个叫
[A]: 在 Cilium 的世界观里,reserved:world 的节点?world 代表的是集群外部的互联网。如果你的 Portainer 尝试去 Github 拉取模板,或者 Headlamp 在检测版本更新,Hubble 就会画一条线指向 world。点击底部的日志,你甚至能清楚看到它们访问了哪个公网 IP 的 443 端口。
[Q] 页面提示
[A]: Hubble UI 默认只展示最近几分钟的实时流量。如果你的应用只是安静地挂在后台没有任何请求,星图上是不会画线的。尝试自己刷新一下应用的网页,连线马上就会冒出来。No data available,但我的应用明明在跑?