3. Helm 架构回顾:Tiller(已弃用)与 Helm 3 的客户端-only 架构对权限的影响

Helm 的架构演进是理解 Kubernetes 集群权限边界的关键分水岭。从 Helm 2 的 Tiller 服务端组件到 Helm 3 的 客户端-only 模式,权限模型发生了根本性变化。理解这一变化,是后续设计安全 Chart 和审计链路的基础。

3.1 Helm 2 架构:Tiller 的“超级权限”困境

Helm 2 在集群内部署了一个名为 Tiller 的服务端组件。Tiller 通常运行在 kube-system 命名空间,并拥有集群级别的 cluster-admin 权限。其工作流程如下:

  1. 客户端(helm CLI) 将 Chart 和 Values 发送给 Tiller。
  2. Tiller 在服务端渲染模板,生成 Kubernetes 资源清单。
  3. Tiller 使用自身的 ServiceAccount 直接调用 Kubernetes API 创建资源。
安全风险: Tiller 的 cluster-admin 权限意味着任何能访问 Tiller 的用户(或 CI 系统)都间接获得了集群的超级管理员权限。这违反了最小权限原则,且无法对用户进行细粒度的权限隔离。

下表对比了 Helm 2 与 Helm 3 在权限模型上的核心差异:

对比维度 Helm 2 (Tiller) Helm 3 (客户端-only)
架构模式 客户端 + 服务端 (Tiller) 纯客户端
权限主体 Tiller 的 ServiceAccount 执行 helm 命令的用户/ServiceAccount
默认权限范围 集群管理员 (cluster-admin) 由 kubeconfig 中的用户权限决定
权限隔离 困难,所有用户共享 Tiller 权限 原生支持,基于 kubeconfig 的 RBAC
审计追踪 模糊,操作者身份难以追溯 清晰,直接关联到 kubeconfig 用户
关键结论: Helm 2 的 Tiller 是一个权限黑洞。它使得集群的权限边界从“用户”退化到了“一个共享的服务组件”,严重削弱了 Kubernetes RBAC 的防护能力。

3.2 Helm 3 架构:客户端-only 与权限回归

Helm 3 彻底移除了 Tiller,回归到纯粹的客户端架构。所有操作(模板渲染、资源安装、升级、删除)都在 helm CLI 所在的环境中完成,然后直接使用 当前用户的 kubeconfig 所携带的凭据与 Kubernetes API 交互。

这一变化带来了以下关键影响:

  • 权限回归到用户: 用户能做什么,完全取决于其 kubeconfig 中配置的 RBAC 权限。不再有“Tiller 后门”。
  • 原生审计支持: Kubernetes API Server 的审计日志可以直接记录到操作者的身份(User Info),审计链路清晰完整。
  • 命名空间隔离: 用户只能在其有权限的命名空间中部署 Chart,天然支持多租户场景。

下面的 SVG 图直观展示了两种架构在权限流上的本质区别:

Helm 2 vs Helm 3 权限架构对比 Helm 2 (Tiller) vs Helm 3 (客户端-only) 权限架构对比 Helm 2 架构 用户/CI Tiller cluster-admin API Server 审计: Tiller SA Helm 3 架构 用户/CI kubeconfig 权限 API Server 审计: 真实用户 权限边界清晰,审计链路完整

3.3 权限模型变化对审计链路的影响

Helm 3 的客户端-only 架构使得审计链路从“模糊”变为“精确”。在 Helm 2 中,Kubernetes 审计日志只能记录到 Tiller 的 ServiceAccount,无法区分具体是哪个用户通过 Tiller 执行了操作。而在 Helm 3 中,审计日志直接记录执行 helm 命令的用户身份。

以下是一个简化的审计日志对比示例:

# Helm 2 审计日志(模糊)
{
  "user": { "username": "system:serviceaccount:kube-system:tiller" },
  "verb": "create",
  "resource": "deployments",
  "namespace": "default"
}

# Helm 3 审计日志(精确)
{
  "user": { "username": "alice@example.com" },
  "verb": "create",
  "resource": "deployments",
  "namespace": "default"
}
最佳实践: 在 Helm 3 环境中,务必为每个团队或用户配置独立的 kubeconfig 和 RBAC 角色。这不仅是权限隔离的基础,也是审计追溯的前提。建议将 kubeconfig 的 user 字段设置为可识别的员工 ID 或服务账号名称。

3.4 迁移到 Helm 3 的权限检查清单

从 Helm 2 迁移到 Helm 3 时,需要重新审视和调整权限策略。以下清单可以帮助你完成平滑迁移:

步骤 操作内容 说明
1 移除 Tiller 部署 使用 kubectl delete deployment tiller -n kube-system 清理
2 创建命名空间级 RBAC 为每个团队/项目创建独立的 Role 和 RoleBinding
3 配置 kubeconfig 确保每个用户的 kubeconfig 包含正确的命名空间上下文
4 启用审计日志 在 API Server 配置中启用审计策略,记录 RequestResponse 级别
5 测试权限边界 使用 helm install --dry-run --debug 验证权限是否按预期工作

通过以上分析可以看出,Helm 3 的架构演进不仅仅是技术上的简化,更是安全模型的一次重要回归——将权限控制权交还给 Kubernetes 原生的 RBAC 体系,为后续的审计链路建设奠定了坚实的基础。