hke 是 Helm Kubernetes Executor 的缩写,它不是一个官方的 Kubernetes 或 Helm 命令,而是一个第三方工具,它的核心功能是在 Kubernetes 集群内部执行 Helm 命令。

这听起来可能有点绕,因为 Helm 本身就可以在本地连接到集群。hke 解决的是一个非常具体但很重要的问题:安全性和权限管理。
hke 是什么?为什么需要它?
想象一下一个典型的 CI/CD(持续集成/持续部署)场景:
- 你的 CI/CD Runner(GitLab Runner, Jenkins Agent)部署在 Kubernetes 集群的一个 Pod 里。
- 这个 Pod 需要执行
helm upgrade来部署你的应用。 - 为了让 Helm 能工作,你必须在 Pod 的容器镜像里打包一个
kubeconfig文件,或者将一个 Service Account 的凭证挂载到 Pod 里。
问题来了:
- 凭证泄露风险:将包含高权限的
kubeconfig或长期有效的 Service Account Token 打包进镜像或挂载到 Pod,会带来巨大的安全风险,任何能访问这个 Pod 的人或服务都可能获取到集群的控制权。 - 权限过大:通常我们只需要 Helm 能操作特定的命名空间,甚至只能操作特定的 Release,但为了方便,我们往往会给这个 CI Pod 一个比较宽泛的权限,违背了“最小权限原则”。
- 管理复杂:为每个 CI/CD 任务创建和管理不同的凭证很繁琐。
hke 的解决方案:

hke 将 Helm 的执行逻辑从 CI Pod 中“抽离”出来,它本身是一个部署在 Kubernetes 集群中的控制器,你的 CI/CD 任务不再直接调用 helm,而是向 hke 发送一个简单的 HTTP 请求,告诉它:“请在 staging 命名空间里,用 my-values.yaml 这个配置文件,升级 my-app 这个 Release”。
hke 控制器接收到请求后,会使用它自己拥有的、经过严格控制的凭证来执行真正的 Helm 命令。
这带来了以下好处:
- 极高的安全性:CI/CD Pod 不再需要任何 Kubernetes 凭证,它只需要一个能访问
hkeAPI Server 的 Token,这个 Token 的权限范围被严格限制为“请求 Helm 任务”,无法直接操作 Kubernetes 资源。 - 权限最小化:
hke本身所用的 Service Account 可以被授予只读权限(比如只能列出 Helm Release),或者只对特定命名空间有操作权限,实现了精细的权限控制。 - 集中管理:所有与 Helm 相关的操作都通过
hke这个统一入口进行,便于审计和管理。 - 环境隔离:可以为不同的环境(如 dev, staging, prod)配置不同的
hke实例,确保不会误操作。
hke 的工作原理
hke 的架构通常包含两部分:

hke控制器:一个部署在 Kubernetes 集群中的 Deployment,它监听来自 API 的请求,并使用内部的 Helm 客户端和 Kubernetes 客户端来执行命令。hkeCLI:一个你安装在本地 CI/CD 环境(或 Runner 上)的小工具,它的作用不是执行 Helm,而是向hke控制器的 API 发送 HTTP 请求。
工作流程如下:
+----------------+ 1. HTTP Request (with helm command) +-------------------+
| CI/CD Runner | -------------------------------------------------> | hke Controller |
| (e.g., Jenkins)| (e.g., hke upgrade my-app ...) | (in K8s Cluster)|
+----------------+ +-------------------+
^ |
| 2. Returns status/output (JSON) | 3. Uses internal
| | K8s client & Helm
+---------------------------------------------------------------+ client to execute
如何使用 hke?(基本步骤)
使用 hke 主要分为三步:安装控制器、配置 CI/ Runner、在 CI 脚本中调用。
步骤 1:安装 hke 控制器
你需要将 hke 控制器部署到你的 Kubernetes 集群中,通常使用 Helm Chart 来安装,因为它本身就是一个 Helm 工具。
# 添加 hke 的 Helm 仓库 (假设仓库地址是这个,请查找官方最新地址) helm repo add hke https://charts.example.com/hke # 创建一个命名空间 (可选,但推荐) kubectl create namespace hke-system # 安装 hke 控制器 helm install hke-controller hke/hke -n hke-system
安装后,hke 会创建一个 Service 和 API Server,你的 CI/CD 任务就可以通过这个地址与它通信。
步骤 2:配置 CI/CD Runner
确保你的 CI/CD Runner(GitLab Runner)的 Pod 能够访问到 hke 的 Service。
- 网络连通性:确保 Runner Pod 和
hkeService 在同一个集群或网络可达。 - 认证:你需要一个 Token 来让
hkeCLI 认证你的请求,这个 Token 通常是通过 Kubernetes 的 ServiceAccount 创建的,并作为 Secret 挂载到 Runner Pod 中。
步骤 3:在 CI/CD 脚本中使用 hke
你可以将原来直接调用 helm 的脚本,改为调用 hke CLI。
旧的方式 (不安全):
# .gitlab-ci.yml
deploy_staging:
script:
- helm upgrade --install my-app ./my-chart/ -f values-staging.yaml -n staging
新的方式 (使用 hke):
# .gitlab-ci.yml
deploy_staging:
script:
# hke CLI 会从环境变量或配置文件中读取 API 地址和 Token
- hke upgrade my-app ./my-chart/ -f values-staging.yaml -n staging
hke CLI 会将这个命令翻译成一个 HTTP 请求,发送给集群中的 hke 控制器。
hke 的常用命令
hke 的命令基本与原生 helm 命令一一对应,但参数略有不同,因为它需要指定目标集群和命名空间。
-
hke install <release_name> <chart_path> [flags]- 在指定命名空间安装一个新的 Release。
- 示例:
hke install my-nginx ./nginx-chart/ -n dev
-
hke upgrade <release_name> <chart_path> [flags]- 升级一个已存在的 Release。
- 示例:
hke upgrade my-nginx ./nginx-chart/ -f prod-values.yaml -n production
-
hke rollback <release_name> [revision] [flags]- 回滚到一个指定的历史版本。
- 示例:
hke rollback my-nginx 3
-
hke uninstall <release_name> [flags]- 删除一个 Release。
- 示例:
hke uninstall my-nginx -n dev
-
hke list [flags]- 列出所有 Release。
- 示例:
hke list -n staging
-
hke status <release_name> [flags]- 查看 Release 的状态。
- 示例:
hke status my-nginx -n production
-
hke test <release_name> [flags]运行 Release 中定义的测试。
hke vs. 原生 helm
| 特性 | 原生 Helm (在 CI Pod 中) | Helm Kubernetes Executor (hke) |
|---|---|---|
| 执行位置 | 在 CI/CD Runner Pod 内部 | 在集群内的 hke 控制器 Pod 中 |
| 凭证管理 | 需要将 kubeconfig 或 ServiceAccount Token 放入 Runner Pod,风险高 |
Runner Pod 无需 K8s 凭证,hke 控制器使用集中管理的、权限受限的凭证 |
| 安全性 | 较低,凭证易泄露 | 高,实现了凭证与执行环境的分离 |
| 权限控制 | 难以精细化,通常权限过大 | 精细,可对 hke 的 ServiceAccount 进行最小权限配置 |
| 架构 | 简单直接 | 引入了中间层,架构稍复杂 |
| 适用场景 | 开发人员本地测试、简单的 CI/CD 流程 | 生产环境 CI/CD、多租户环境、对安全要求高的场景 |
如果你的 CI/CD 流程部署在 Kubernetes 集群内,并且你对安全性有较高的要求(尤其是在生产环境),hke 是一个非常优秀的选择,它通过引入一个轻量级的中间层,极大地提升了 Helm 操作的安全性和可控性。
