4. Cilium 与 Hubble 的集成部署:Cilium 安装选项、Hubble 的启用方式、Helm Chart 参数详解

在生产环境中,Cilium 与 Hubble 的集成部署并非简单的“一键安装”。正确的做法是通过 Helm Chart 精细控制 Cilium Agent 的 eBPF 数据面行为,并同步启用 Hubble 的观测层。本章将深入解析 Cilium 的安装选项、Hubble 的启用方式以及核心 Helm 参数,帮助你在部署阶段就为租户隔离观测打下坚实基础。

4.1 Cilium 安装选项与核心组件

Cilium 的部署架构由 Cilium Agent(运行在每个节点上的 DaemonSet)、Cilium Operator(管理集群级状态)以及可选的 Hubble 组件组成。安装时需根据集群网络模型(Overlay 或 Native Routing)和 CNI 链式配置选择正确的参数。

关键安装选项速查表
安装选项 Helm 参数 说明
IPAM 模式 --set ipam.mode=cluster-pool 默认模式,自动分配 PodCIDR 范围
路由模式 --set routingMode=native 直接路由,依赖底层网络(如 BGP)
Overlay 封装 --set routingMode=tunnel 使用 VXLAN/Geneve 封装,适合云环境
KubeProxy 替换 --set kubeProxyReplacement=true 完全绕过 kube-proxy,提升性能
eBPF 数据面 --set bpf.masquerade=true 启用 eBPF 伪装,减少 iptables 开销

4.2 Hubble 的启用方式与组件架构

Hubble 是 Cilium 的分布式观测层,由 Hubble Relay(聚合查询)、Hubble UI(可视化面板)和 Hubble Metrics(Prometheus 指标)组成。启用 Hubble 需要在 Helm 安装时显式开启相关选项。

推荐实践:在启用 Hubble 时,务必同时开启 Hubble Relay 和 Hubble Metrics,以便后续进行跨节点流量查询和告警配置。
# 启用 Hubble 核心组件
helm upgrade cilium cilium/cilium --version 1.16.0 \
  --namespace kube-system \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true \
  --set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}"
Hubble 组件架构与数据流 Cilium Agent eBPF 数据面 + Hubble Server Hubble Relay gRPC 聚合查询 Hubble UI 可视化面板 gRPC 流 API 查询 Hubble Metrics Prometheus 指标暴露 关键说明: • Hubble Server 内嵌于 Cilium Agent 中,通过 Unix Socket 获取 eBPF 事件。 • Hubble Relay 作为无状态中间层,聚合所有 Agent 的 gRPC 流,提供全局视图。 • Hubble UI 通过 Relay 的 API 查询数据,不直接与 Agent 通信。

4.3 Helm Chart 参数详解

以下表格列出了与 Hubble 集成部署最相关的 Helm 参数,涵盖启用、存储、认证和性能调优四个方面。建议在部署前根据集群规模预先规划。

参数路径 默认值 推荐值(生产) 说明
hubble.relay.enabled false true 启用 Hubble Relay 组件
hubble.relay.replicas 1 2 Relay 副本数,高可用建议 ≥2
hubble.ui.enabled false true 启用 Hubble UI 面板
hubble.metrics.enabled {} {dns,drop,tcp,flow} 启用的指标列表,按需选择
hubble.metrics.serviceMonitor.enabled false true 自动创建 Prometheus ServiceMonitor
hubble.tls.auto.enabled false true 自动生成 mTLS 证书,保障通信安全
hubble.eventBufferCapacity 4095 8191 每个 Agent 的事件缓冲区大小,大集群建议增大

4.4 集成部署的完整 Helm 命令示例

以下命令展示了在生产环境中启用 Hubble 并配置核心参数的完整 Helm 安装/升级命令。请根据实际集群网络模式调整 routingMode 和 ipam.mode。

helm upgrade cilium cilium/cilium --version 1.16.0 \
  --namespace kube-system \
  --set routingMode=tunnel \
  --set ipam.mode=cluster-pool \
  --set kubeProxyReplacement=true \
  --set bpf.masquerade=true \
  --set hubble.relay.enabled=true \
  --set hubble.relay.replicas=2 \
  --set hubble.ui.enabled=true \
  --set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}" \
  --set hubble.metrics.serviceMonitor.enabled=true \
  --set hubble.tls.auto.enabled=true \
  --set hubble.tls.auto.method=cronJob \
  --set hubble.eventBufferCapacity=8191
注意:如果集群已安装 Cilium 但未启用 Hubble,执行上述命令后 Hubble 组件会滚动升级。建议在业务低峰期操作,并提前检查 cilium status 确认组件健康。
Helm 参数与组件映射关系 hubble.relay.* hubble.ui.* hubble.metrics.* hubble.tls.* hubble.eventBuffer* Hubble Relay (Deployment) Hubble UI (Deployment) Prometheus Metrics Endpoint mTLS 证书自动轮换 Agent 事件缓冲区大小

4.5 部署验证与常见问题

部署完成后,建议按以下步骤验证 Hubble 是否正常工作:

  1. 检查 Pod 状态:确保 cilium-xxxxx、hubble-relay-xxx、hubble-ui-xxx 均为 Running 状态。
  2. 测试 Hubble Relay 连通性:使用 hubble observe 命令查看实时流量。
  3. 检查 Metrics 端点:访问 curl http://localhost:9965/metrics 确认指标暴露。
# 验证 Hubble Relay 是否正常响应
kubectl exec -n kube-system deployment/hubble-relay -- hubble observe --last 5

# 验证 Hubble UI 是否可访问
kubectl port-forward -n kube-system deployment/hubble-ui 12000:8080
# 浏览器打开 http://localhost:12000
常见问题:如果 Hubble UI 无法显示流量,请检查 hubble.relay.enabled 是否设置为 true,以及 hubble.metrics.enabled 是否包含了 flow 指标。另外,确保 Cilium Agent 的 monitor-aggregation 参数未设置为 none。