Cilium Hubble 启用指南:cilium hubble enable 命令详解与 Helm 实现原理
2026/9/13 12:49:48 网站建设 项目流程

Cilium Hubble 启用指南:cilium hubble enable 命令详解与 Helm 实现原理

【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium

Hubble 是 Cilium 基于 eBPF 实现的网络可观测性组件,能够以低开销采集集群内的流量、策略决策与服务依赖关系。本文围绕 Cilium 官方 CLI 提供的cilium hubble enable命令,讲解如何通过 Helm 在已有 Cilium 部署上启用 Hubble、Hubble Relay 与 Hubble UI 三个核心组件,并结合仓库源码说明其底层 Helm 升级实现、参数语义与常用配套命令。

适用前提:本文所有命令与参数以当前仓库(cilium-cli/install/kubernetes/cilium/)为准。使用前提是集群中已通过 Helm 方式安装好 Cilium(Helm release 默认名为cilium),ciliumCLI 已配置好访问集群的 kubeconfig。

cilium hubble enable命令概览

cilium hubble enable的作用是“使用 Helm 启用 Hubble 可观测性”(官方命令描述:Enable Hubble observability using Helm),其命令定义位于 cilium-cli/cli/hubble.go 中注册的newCmdHubbleEnableWithHelm,并由cilium-cli/hubble/hubble.go中的EnableWithHelm完成实际逻辑。

命令基本形态:

cilium hubble enable [flags]

该命令并非直接下发 API 调用,而是基于当前集群中已有的 Cilium Helm release 执行一次参数合并与helm upgrade,将 Hubble 相关开关写入 Helm values。命令本身不提供 Hubble 的完整启停生命周期,而是与cilium hubble disable(见 cilium_hubble_disable.md)互为镜像操作。

子命令专属选项

选项默认值说明
-h, --help-显示 enable 子命令帮助信息
--relaytrue是否部署 Hubble Relay 组件(Hubble Relay 用于聚合集群内各节点 Hubble 数据,并提供统一的查询 API)
--uifalse是否同时启用 Hubble UI 图形界面(默认不启用)

在源码中,这两个 flag 定义于addCommonHubbleEnableFlags(cilium-cli/cli/hubble.go):

cmd.Flags().BoolVar(&params.Relay, "relay", true, "Deploy Hubble Relay") cmd.Flags().BoolVar(&params.UI, "ui", false, "Enable Hubble UI")

需要注意两点默认值语义:

  • --relay默认为true,即执行cilium hubble enable时会默认部署 Hubble Relay
  • --ui默认为false,需要显式追加--ui才会部署 Hubble UI 组件。

继承的全局选项

cilium hubble enable继承自cilium hubble父命令的全局选项(完整定义见 cilium_hubble.md),用于指定目标集群与 Helm release:

选项默认值说明
--as string以指定用户名(普通用户或 ServiceAccount)身份模拟执行操作
--as-group stringArray模拟执行操作时附加的用户组,可重复指定多个组
--context string使用的 Kubernetes 配置上下文(kubeconfig context)
--helm-release-name stringcilium集群中 Cilium 对应的 Helm release 名称
--kubeconfig stringkubeconfig 文件路径
-n, --namespace stringkube-systemCilium 所在的命名空间,也可通过环境变量CILIUM_NAMESPACE设置

在代码中,RootParams.NamespaceRootParams.HelmReleaseName会被透传到 Hubble 子命令的执行上下文(cilium-cli/cli/hubble.go):

params.Namespace = RootParams.Namespace params.HelmReleaseName = RootParams.HelmReleaseName ctx := context.Background() if err := hubble.EnableWithHelm(ctx, RootK8sClient, params); err != nil { fatalf("Unable to enable Hubble: %s", err) }

底层实现:一次带值合并的 Helm 升级

cilium hubble enable的核心实现位于 cilium-cli/hubble/hubble.go 的EnableWithHelm函数:

func EnableWithHelm(ctx context.Context, k8sClient *k8s.Client, params Parameters) error { options := values.Options{ Values: []string{ fmt.Sprintf("hubble.relay.enabled=%t", params.Relay), fmt.Sprintf("hubble.ui.enabled=%t", params.UI), }, } vals, err := helm.MergeVals(options, nil) if err != nil { return err } upgradeParams := helm.UpgradeParameters{ Namespace: params.Namespace, Name: params.HelmReleaseName, Values: vals, ResetValues: false, ReuseValues: true, WaitDuration: defaults.UninstallTimeout, } _, err = helm.Upgrade(ctx, k8sClient.HelmActionConfig, upgradeParams) return err }

从实现可以提炼出几个关键事实:

  • 生效的 Helm values 只有两个键hubble.relay.enabledhubble.ui.enabled,取值由--relay--ui两个 flag 的布尔值格式化而来。也就是说,该命令只做“开关”层面的改动,不会触及 Hubble 的其他配置项(如hubble.listenAddresshubble.metrics等)。
  • ReuseValues: true+ResetValues: false:升级会复用 release 上已有的 values,并合并本次新增的两个键,因此不会覆盖此前安装 Cilium 时的其他自定义配置。
  • 执行方式是helm.Upgrade:命令本身并不直接创建 Deployment/Service,而是复用 Helm 发布流程,由 Helm 根据 values 渲染出 Hubble 相关资源。
  • 等待时长使用defaults.UninstallTimeout(定义于 cilium-cli/defaults/defaults.go),升级过程会等待资源就绪。

与之对应的DisableWithHelm(cilium-cli/hubble/hubble.go)则将hubble.relay.enabled=falsehubble.ui.enabled=false写入 values 并再次执行helm upgrade,实现一键关闭。

启用后各组件的行为与定位

执行成功一次cilium hubble enable后,涉及的核心组件包括:

  • Hubble(主组件):负责从 eBPF 数据通路采集流量与策略事件。在 Helm values 中由hubble.enabled控制(见 install/kubernetes/cilium/values.yaml 的hubble:段落)。
  • Hubble Relay(--relay,默认启用):聚合集群内所有节点的 Hubble 数据,对外暴露统一 gRPC 查询接口。其 Deployment/Service 名称约定为hubble-relay,相关常量(RelayDeploymentName = "hubble-relay"RelayPodSelector等)定义于 cilium-cli/defaults/defaults.go。在 Helm values 中对应hubble.relay.enabled(install/kubernetes/cilium/values.yaml),默认false,需由本命令置为true
  • Hubble UI(--ui,默认关闭):基于 Web 的图形界面,将 Relay 聚合的数据可视化。对应 Deployment 名hubble-ui,其前端通过hubble-relay:443hubble-relay:80访问 Relay 服务(见 install/kubernetes/cilium/templates/hubble-ui/deployment.yaml)。在 Helm values 中对应hubble.ui.enabled(install/kubernetes/cilium/values.yaml),默认false

需要强调的是,cilium hubble enable只管理 Relay 与 UI 这两个布尔开关。若此前 Cilium 安装时hubble.enabled未打开,仍需通过 Helm values 将 Hubble 主组件启用,方可获得完整的观测能力。

典型使用场景与组合操作

仅启用 Hubble 主组件与 Relay(默认路径)

cilium hubble enable

等价于执行helm upgrade并将hubble.relay.enabled置为truehubble.ui.enabled置为false

同时启用 Hubble UI

cilium hubble enable --ui

如需调整目标命名空间或 release 名称:

cilium hubble enable --ui -n kube-system --helm-release-name cilium

关闭 Hubble 可观测性

cilium hubble disable

该命令会把hubble.relay.enabledhubble.ui.enabled都写为false,对应源码见DisableWithHelm

验证与访问

启用完成后,可用cilium hubble命令族的其他子命令验证与访问(完整命令族见 cilium_hubble.md):

  • 转发 Relay 端口到本机cilium hubble port-forward):将hubble-relay服务的端口转发到本地,默认本地端口4245--port-forward 0可让系统随机选择端口。底层实现RelayPortForwardCommand(cilium-cli/hubble/relay.go)会对hubble-relay服务执行PortForwardService,并提示Hubble Relay is available at 127.0.0.1:<port>
  • 打开 Hubble UIcilium hubble ui):默认将本地12000端口转发到hubble-ui服务,并自动在浏览器中打开http://localhost:12000;传--open-browser=false可禁止自动打开浏览器,传--port-forward 0可选随机端口。实现见 cilium-cli/hubble/ui.go 的UIPortForwardCommand
# 转发 Relay 端口(默认 4245) cilium hubble port-forward # 打开 Hubble UI(默认 12000,自动打开浏览器) cilium hubble ui

常见问题排查要点

  • 命令报错“Unable to enable Hubble”EnableWithHelm返回错误时会以fatalf("Unable to enable Hubble: %s", err)终止(cilium-cli/cli/hubble.go)。常见原因包括 kubeconfig/context 指向了错误的集群、命名空间内不存在名为cilium的 Helm release、或当前用户对目标命名空间没有 upgrade 权限。
  • UI 已启用但无法访问:确认hubble-uihubble-relayDeployment 均已就绪,UI 依赖 Relay 作为数据后端,两者必须同时处于 Running 状态。
  • 只想启用 Relay 不想启用 UI:保持默认即可(--ui默认false),无需额外传参。
  • 关于配置不被覆盖:由于启用逻辑使用ReuseValues: true且仅追加两个 value 键,集群中已有的其他 Cilium 配置(如策略、加密、IPAM 设置)不会被本次操作重置。

小结

cilium hubble enable是 Cilium 命令行体系中开启可观测性能力的标准入口,其背后是一次精心构造的 Helm 升级:仅写入hubble.relay.enabledhubble.ui.enabled两个开关,并通过复用既有 values 保证不干扰其他配置。配合cilium hubble port-forwardcilium hubble ui,开发者可以在几分钟内从已有 Cilium 集群快速获得流量可视化与查询能力。深入阅读 cilium-cli/hubble/hubble.go、cilium-cli/hubble/relay.go、cilium-cli/hubble/ui.go 与 install/kubernetes/cilium/values.yaml 可以进一步理解该命令的完整行为边界。

【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询