菜鸟科技网

hke命令是什么?如何使用?

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

hke命令是什么?如何使用?-图1
(图片来源网络,侵删)

这听起来可能有点绕,因为 Helm 本身就可以在本地连接到集群。hke 解决的是一个非常具体但很重要的问题:安全性和权限管理


hke 是什么?为什么需要它?

想象一下一个典型的 CI/CD(持续集成/持续部署)场景:

  1. 你的 CI/CD Runner(GitLab Runner, Jenkins Agent)部署在 Kubernetes 集群的一个 Pod 里。
  2. 这个 Pod 需要执行 helm upgrade 来部署你的应用。
  3. 为了让 Helm 能工作,你必须在 Pod 的容器镜像里打包一个 kubeconfig 文件,或者将一个 Service Account 的凭证挂载到 Pod 里。

问题来了:

  • 凭证泄露风险:将包含高权限的 kubeconfig 或长期有效的 Service Account Token 打包进镜像或挂载到 Pod,会带来巨大的安全风险,任何能访问这个 Pod 的人或服务都可能获取到集群的控制权。
  • 权限过大:通常我们只需要 Helm 能操作特定的命名空间,甚至只能操作特定的 Release,但为了方便,我们往往会给这个 CI Pod 一个比较宽泛的权限,违背了“最小权限原则”。
  • 管理复杂:为每个 CI/CD 任务创建和管理不同的凭证很繁琐。

hke 的解决方案:

hke命令是什么?如何使用?-图2
(图片来源网络,侵删)

hke 将 Helm 的执行逻辑从 CI Pod 中“抽离”出来,它本身是一个部署在 Kubernetes 集群中的控制器,你的 CI/CD 任务不再直接调用 helm,而是向 hke 发送一个简单的 HTTP 请求,告诉它:“请在 staging 命名空间里,用 my-values.yaml 这个配置文件,升级 my-app 这个 Release”。

hke 控制器接收到请求后,会使用它自己拥有的、经过严格控制的凭证来执行真正的 Helm 命令。

这带来了以下好处:

  • 极高的安全性:CI/CD Pod 不再需要任何 Kubernetes 凭证,它只需要一个能访问 hke API Server 的 Token,这个 Token 的权限范围被严格限制为“请求 Helm 任务”,无法直接操作 Kubernetes 资源。
  • 权限最小化hke 本身所用的 Service Account 可以被授予只读权限(比如只能列出 Helm Release),或者只对特定命名空间有操作权限,实现了精细的权限控制。
  • 集中管理:所有与 Helm 相关的操作都通过 hke 这个统一入口进行,便于审计和管理。
  • 环境隔离:可以为不同的环境(如 dev, staging, prod)配置不同的 hke 实例,确保不会误操作。

hke 的工作原理

hke 的架构通常包含两部分:

hke命令是什么?如何使用?-图3
(图片来源网络,侵删)
  1. hke 控制器:一个部署在 Kubernetes 集群中的 Deployment,它监听来自 API 的请求,并使用内部的 Helm 客户端和 Kubernetes 客户端来执行命令。
  2. hke CLI:一个你安装在本地 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 和 hke Service 在同一个集群或网络可达。
  • 认证:你需要一个 Token 来让 hke CLI 认证你的请求,这个 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 操作的安全性和可控性。

分享:
扫描分享到社交APP
上一篇
下一篇