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

EC2托管EKS工作节点执行kubectl命令报Forbidden权限错误如何解决?

问题本质

该报错是EKS工作节点默认使用的system:node身份权限不足导致的。K8s默认仅给工作节点所属的system:nodes用户组分配节点注册、状态上报、Pod调度信息拉取等基础运行必要权限,没有开放Pod查询、exec等操作权限,属于标准安全限制。

排查步骤
  • 确认当前使用身份:在节点执行kubectl config view,查看user字段是否为system:node:<节点实例名>,和报错信息中的用户名一致,排除身份误用问题
  • 验证权限状态:执行kubectl auth can-i create pods/exec -n default,返回no即可确认是RBAC权限不足导致的报错
解决方案

分两种场景选择对应方案:

方案1:临时调试使用(推荐)

不要直接修改节点默认权限,直接将管理员kubeconfig传到节点使用即可:

  1. 在你本地已配置EKS管理员权限的设备上执行aws eks update-kubeconfig --name <你的EKS集群名> --region <AWS区域>生成管理员kubeconfig
  2. 将本地~/.kube/config文件传输到工作节点的~/.kube/目录覆盖原有配置,即可正常执行所有kubectl操作

注意:调试完成后及时删除节点上的管理员kubeconfig文件,避免节点被攻破后集群权限泄露

方案2:长期给节点开放指定权限(仅特殊场景使用)

如果业务确实需要工作节点本身具备kubectl操作权限,可通过RBAC配置给system:nodes用户组绑定对应权限:

  1. 创建ClusterRole配置文件node-ops-role.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: node-ops-role
rules:
# 按需调整需要开放的资源和操作权限
- apiGroups: [""]
  resources: ["pods", "pods/exec", "services", "endpoints"]
  verbs: ["get", "list", "watch", "create"]
  1. 应用配置:kubectl apply -f node-ops-role.yaml
  2. 创建ClusterRoleBinding配置文件node-ops-binding.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: node-ops-binding
subjects:
- kind: Group
  name: system:nodes
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: node-ops-role
  apiGroup: rbac.authorization.k8s.io
  1. 应用绑定配置:kubectl apply -f node-ops-binding.yaml
    配置完成后回到工作节点执行kubectl命令即可正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:06:01