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+
⚠ 内核 BTF 检查: Hubble 依赖内核 BTF(BPF Type Format)来解析内核数据结构。执行 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
💡 安装耗时: 首次安装需要拉取 Cilium Agent 镜像(约 500MB),以及 Hubble Relay、Hubble UI 镜像。在 3 节点集群上,完整部署通常需要 3-5 分钟。可使用 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}"
Hubble 组件部署架构与数据流 Kubernetes 集群 Cilium Agent eBPF 程序加载 流量捕获 指标聚合 Hubble Relay gRPC 代理 流数据缓存 指标暴露 (:4245) Hubble UI Web 仪表盘 (:8081) Prometheus 指标抓取 gRPC 流 API 查询 指标拉取 说 明 实线 = 数据 流 虚线 = 指标 拉取

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 解析请求与响应,辅助排查服务发现故障。
📊 验证清单:
  1. 所有 Cilium Agent Pod 的 cilium status 输出中 Hubble 字段为 Ok。
  2. hubble status 返回 Healthcheck: Ok 且 Flows 计数持续增长。
  3. Hubble UI 加载后,服务拓扑图显示至少 2 个节点之间的连线。
  4. 执行 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 观测结果。