ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

Cilium Hubble 启用指南:cilium hubble enable 命令详解与 Helm 实现原理 Cilium Hubble 启用指南cilium hubble enable 命令详解与 Helm 实现原理【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/ciliumHubble 是 Cilium 基于 eBPF 实现的网络可观测性组件能够以低开销采集集群内的流量、策略决策与服务依赖关系。本文围绕 Cilium 官方 CLI 提供的cilium hubble enable命令讲解如何通过 Helm 在已有 Cilium 部署上启用 Hubble、Hubble Relay 与 Hubble UI 三个核心组件并结合仓库源码说明其底层 Helm 升级实现、参数语义与常用配套命令。适用前提本文所有命令与参数以当前仓库cilium-cli/与install/kubernetes/cilium/为准。使用前提是集群中已通过 Helm 方式安装好 CiliumHelm release 默认名为ciliumciliumCLI 已配置好访问集群的 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 定义于addCommonHubbleEnableFlagscilium-cli/cli/hubble.gocmd.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 string空kubeconfig 文件路径-n, --namespace stringkube-systemCilium 所在的命名空间也可通过环境变量CILIUM_NAMESPACE设置在代码中RootParams.Namespace与RootParams.HelmReleaseName会被透传到 Hubble 子命令的执行上下文cilium-cli/cli/hubble.goparams.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.enabled与hubble.ui.enabled取值由--relay与--ui两个 flag 的布尔值格式化而来。也就是说该命令只做“开关”层面的改动不会触及 Hubble 的其他配置项如hubble.listenAddress、hubble.metrics等。ReuseValues: trueResetValues: false升级会复用 release 上已有的 values并合并本次新增的两个键因此不会覆盖此前安装 Cilium 时的其他自定义配置。执行方式是helm.Upgrade命令本身并不直接创建 Deployment/Service而是复用 Helm 发布流程由 Helm 根据 values 渲染出 Hubble 相关资源。等待时长使用defaults.UninstallTimeout定义于 cilium-cli/defaults/defaults.go升级过程会等待资源就绪。与之对应的DisableWithHelmcilium-cli/hubble/hubble.go则将hubble.relay.enabledfalse、hubble.ui.enabledfalse写入 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.enabledinstall/kubernetes/cilium/values.yaml默认false需由本命令置为true。Hubble UI--ui默认关闭基于 Web 的图形界面将 Relay 聚合的数据可视化。对应 Deployment 名hubble-ui其前端通过hubble-relay:443或hubble-relay:80访问 Relay 服务见 install/kubernetes/cilium/templates/hubble-ui/deployment.yaml。在 Helm values 中对应hubble.ui.enabledinstall/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置为true、hubble.ui.enabled置为false。同时启用 Hubble UIcilium hubble enable --ui如需调整目标命名空间或 release 名称cilium hubble enable --ui -n kube-system --helm-release-name cilium关闭 Hubble 可观测性cilium hubble disable该命令会把hubble.relay.enabled与hubble.ui.enabled都写为false对应源码见DisableWithHelm。验证与访问启用完成后可用cilium hubble命令族的其他子命令验证与访问完整命令族见 cilium_hubble.md转发 Relay 端口到本机cilium hubble port-forward将hubble-relay服务的端口转发到本地默认本地端口4245--port-forward 0可让系统随机选择端口。底层实现RelayPortForwardCommandcilium-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-browserfalse可禁止自动打开浏览器传--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-ui与hubble-relayDeployment 均已就绪UI 依赖 Relay 作为数据后端两者必须同时处于 Running 状态。只想启用 Relay 不想启用 UI保持默认即可--ui默认false无需额外传参。关于配置不被覆盖由于启用逻辑使用ReuseValues: true且仅追加两个 value 键集群中已有的其他 Cilium 配置如策略、加密、IPAM 设置不会被本次操作重置。小结cilium hubble enable是 Cilium 命令行体系中开启可观测性能力的标准入口其背后是一次精心构造的 Helm 升级仅写入hubble.relay.enabled与hubble.ui.enabled两个开关并通过复用既有 values 保证不干扰其他配置。配合cilium hubble port-forward与cilium 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),仅供参考
返回列表