You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm升级EKS应用失败:无Secret删除权限问题求助

问题排查与解决方案

核心原因定位

问题本质是CI/CD流程中使用的build身份(对应Kubernetes ServiceAccount)缺少删除目标Namespace下Helm Release Secret的RBAC权限,而本地环境使用的身份拥有足够权限,因此可以正常执行。

当修改nameOverride后执行helm upgrade时,Helm会触发以下操作导致权限检查:

  1. 由于资源名称变更,Helm会重新生成新的Kubernetes资源
  2. 同时Helm会清理旧版本的Release记录(即历史中标记为superseded的v8至v16版本),这些旧版本的元数据存储在以sh.helm.release.v1.xxx命名的Secret中,清理时需要删除这些Secret的权限

具体排查步骤

  • 直接验证权限:在CI/CD环境中执行以下命令,确认是否真的缺少删除Secret的权限

    # 尝试删除报错的Secret
    kubectl delete secret sh.helm.release.v1.eks-test-app-dev.v8 -n ${NAMESPACE}
    # 检查当前身份是否拥有删除Secret的权限
    kubectl auth can-i delete secrets --as=system:serviceaccount:<你的Build ServiceAccount所在Namespace>:<Build ServiceAccount名称> -n ${NAMESPACE}
    

    如果返回no,则直接确认是RBAC权限不足。

  • 检查Build ServiceAccount的RBAC绑定:
    查看绑定到Build ServiceAccount的Role/ClusterRole,确认是否包含对secrets资源的delete权限,示例权限规则应包含:

    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "list", "create", "delete", "update", "patch"]
    
  • 确认Helm操作的历史清理行为:
    检查CI中的helm upgrade命令是否包含--max-history参数,若设置的值小于当前历史记录数,Helm会自动清理旧版本的Secret;即使未显式设置,Helm默认保留10条历史记录,当历史超过10条时也会触发清理。

解决方案

为Build ServiceAccount添加必要的RBAC权限,使其能管理Helm Release相关的Secret:

  1. 创建Namespace级别的Role(若需要跨Namespace部署则使用ClusterRole):

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: helm-release-manager
      namespace: ${NAMESPACE}
    rules:
    # 允许管理Helm Release Secret
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "list", "create", "delete", "update", "patch"]
    # 允许管理常规K8s应用资源(根据你的Chart内容调整)
    - apiGroups: ["apps"]
      resources: ["deployments", "statefulsets", "daemonsets"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["services", "configmaps", "persistentvolumeclaims"]
      verbs: ["*"]
    
  2. 将Role绑定到Build ServiceAccount:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: bind-helm-release-manager
      namespace: ${NAMESPACE}
    subjects:
    - kind: ServiceAccount
      name: <你的Build ServiceAccount名称>
      namespace: ${NAMESPACE}
    roleRef:
      kind: Role
      name: helm-release-manager
      apiGroup: rbac.authorization.k8s.io
    
  3. 重新触发CI/CD部署,验证权限问题是否解决。


内容的提问来源于stack exchange,提问作者HugoDife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:26:16