4. Hubble 安装与部署:环境要求、Helm 安装 Cilium+Hubble、启用 Hubble 指标与 UI、验证部署状态
本章聚焦 Hubble 的完整安装与部署流程。Hubble 作为 Cilium 的可观测性子项目,其部署深度绑定 Cilium 的 Helm Chart。我们将从环境前置检查开始,逐步完成 Helm 仓库配置、Cilium+Hubble 一体化安装、指标与 UI 启用,最后通过 CLI 与 Dashboard 双重验证部署状态。
4.1 环境要求与前置检查
在部署 Hubble 之前,必须确保 Kubernetes 集群满足以下最低要求。不满足任一条件将导致 Hubble 组件无法正常启动或数据采集异常。
| 类别 | 最低要求 | 推荐配置 |
|---|---|---|
| Kubernetes 版本 | v1.21+ | v1.27+ |
| 内核版本 | Linux 4.19+ (支持 BPF) | Linux 5.10+ (BTF 支持) |
| 节点数量 | 1 个控制面 + 1 个工作节点 | 3 个控制面 + 3 个工作节点 |
| Helm 版本 | v3.8+ | v3.14+ |
| kubectl 版本 | 与集群版本偏差 ≤ 1 个小版本 | 与集群版本一致 |
| CNI 预装 | 无(Cilium 将替换现有 CNI) | 集群未安装其他 CNI 插件 |
| etcd 存储 | 集群 etcd 健康 | etcd 3.5+ |
ls /sys/kernel/btf/vmlinux 确认文件存在。若缺失,需在 Cilium 安装时启用 bpf.masquerade=false 并降级部分 Hubble 功能。
4.2 Helm 安装 Cilium + Hubble
推荐使用 Helm 一体化安装 Cilium 与 Hubble。Cilium 官方 Helm Chart 已将 Hubble 作为可选子组件集成,无需单独安装 Hubble Chart。
4.2.1 添加 Helm 仓库并更新
helm repo add cilium https://helm.cilium.io/
helm repo update
4.2.2 创建命名空间与配置 values 文件
建议将 Cilium 部署在独立的 kube-system 命名空间(默认),或使用 cilium-system 自定义命名空间。以下为生产级 values 配置示例,重点开启 Hubble 相关组件:
# hubble-values.yaml
# 全局设置
cluster:
name: my-cluster
id: 1
# Hubble 核心组件
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
# 使用 NodePort 暴露 UI,便于快速访问
service:
type: NodePort
metrics:
enabled:
- dns
- drop
- tcp
- flow
- icmp
- http
# Cilium 网络策略与监控
ipam:
mode: kubernetes
kubeProxyReplacement: true
l7Proxy: true
monitorAggregation: medium
4.2.3 执行 Helm 安装
helm install cilium cilium/cilium \
--namespace kube-system \
--values hubble-values.yaml \
--version 1.15.0
kubectl -n kube-system get pods -l k8s-app=cilium -w 实时观察 Pod 启动状态。
4.3 启用 Hubble 指标与 UI
Hubble 的指标暴露与 UI 服务已在上述 values 文件中通过 hubble.metrics.enabled 和 hubble.ui.enabled 启用。以下为手动验证与调整方法。
4.3.1 验证 Hubble 指标端点
Hubble Relay 默认在端口 4245 暴露 Prometheus 指标。通过端口转发验证:
kubectl port-forward -n kube-system svc/hubble-relay 4245:4245 &
curl http://localhost:4245/metrics | head -20
预期输出应包含 hubble_flows_processed_total、hubble_drop_total 等指标前缀。
4.3.2 获取 Hubble UI 访问地址
由于 values 中配置了 service.type: NodePort,可通过任意节点 IP + NodePort 访问:
kubectl get svc -n kube-system hubble-ui
# 输出示例:
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# hubble-ui NodePort 10.96.100.50 <none> 8081:31234/TCP 5m
浏览器访问 http://<任意节点IP>:31234 即可打开 Hubble UI 仪表盘。
4.3.3 启用额外指标(可选)
若需在安装后动态添加指标,可通过 Helm 升级实现:
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http,port-distribution}"
4.4 验证部署状态
部署完成后,需从 Pod 状态、CLI 工具、UI 界面三个维度进行验证,确保 Hubble 全链路正常工作。
4.4.1 Pod 与 Service 状态检查
# 查看所有 Cilium 相关 Pod
kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system get pods -l k8s-app=hubble-relay
kubectl -n kube-system get pods -l k8s-app=hubble-ui
# 预期输出:所有 Pod 均为 Running 状态,READY 列为 1/1 或 2/2
# 查看 Service 端点
kubectl -n kube-system get svc -l io.cilium/app=operator
kubectl -n kube-system get svc hubble-relay hubble-ui
4.4.2 使用 Hubble CLI 验证流量观测
安装 Hubble CLI 客户端(推荐 v0.13+),通过 Relay 服务验证流数据可达:
# 安装 Hubble CLI(Linux amd64 示例)
curl -L https://github.com/cilium/hubble/releases/download/v0.13.0/hubble-linux-amd64.tar.gz | tar xz
sudo mv hubble /usr/local/bin/
# 设置 Hubble 服务地址
export HUBBLE_SERVER=localhost:4245
# 端口转发 Hubble Relay
kubectl port-forward -n kube-system svc/hubble-relay 4245:4245 &
# 验证连接
hubble status
# 预期输出:
# Healthcheck (via localhost:4245): Ok
# Current/Max Flows: 1234/4096 (30.12%)
# Flows/s: 12.34
# 实时观察流量
hubble observe --since 5m --limit 10
4.4.3 Hubble UI 可视化验证
通过浏览器访问 Hubble UI,验证以下核心功能:
- 服务拓扑图: 展示集群内 Pod、Service 之间的网络连接关系,连线颜色标识协议类型(TCP/UDP/HTTP)。
- 流量列表: 实时滚动显示经过 Cilium 的每一条流记录,包含源/目的 IP、端口、协议、Verdict(允许/丢弃)。
- 丢弃统计: 按策略丢弃、无法路由、TTL 过期等分类展示丢弃事件。
- DNS 查询: 展示集群内 DNS 解析请求与响应,辅助排查服务发现故障。
- 所有 Cilium Agent Pod 的
cilium status输出中Hubble字段为Ok。 hubble status返回Healthcheck: Ok且 Flows 计数持续增长。- Hubble UI 加载后,服务拓扑图显示至少 2 个节点之间的连线。
- 执行
hubble observe --verdict DROPPED能看到策略丢弃事件(若已配置网络策略)。
4.5 常见部署问题与排查
| 现象 | 可能原因 | 排查命令 / 解决方案 |
|---|---|---|
| Hubble Relay Pod 启动失败 | gRPC 端口冲突或 etcd 连接超时 | kubectl logs -n kube-system <hubble-relay-pod> 检查 gRPC 错误;确认 etcd 服务端点可达 |
| Hubble UI 显示空白 | Relay 未就绪或跨域请求被拦截 | kubectl port-forward svc/hubble-ui 8081:8081 本地访问;检查浏览器控制台 CORS 错误 |
hubble observe 无输出 |
Agent 未捕获流量或 Relay 缓存为空 | cilium monitor -v 验证 Agent 本地流;hubble status 检查 Flows 计数是否为 0 |
| 指标端点返回 404 | Hubble Metrics 未启用或端口错误 | 确认 values 中 hubble.metrics.enabled 非空;检查 Service 端口映射 |
| Pod 间网络不通 | Cilium Agent 启动时 CNI 配置未生效 | cilium status 检查 KubeProxyReplacement 状态;重启 Cilium Agent Pod |
cilium connectivity test 命令(需安装 Cilium CLI)可一键测试集群内 Pod 连通性、DNS 解析、Hubble 流数据采集是否正常。该命令会自动部署测试 Pod 并验证 Hubble 观测结果。