AWS EKS集群kubectl logs授权错误排查求助
问题分析
删除EKS集群的创建角色后,控制平面的kube-apiserver无法通过kube-apiserver-kubelet-client用户访问kubelet的nodes/proxy接口,而查看Pod日志依赖这个接口获取节点上的日志数据,因此触发授权错误。
修复步骤
1. 恢复EKS集群关联的IAM角色
- 重新创建与原角色同名的IAM角色,信任策略配置为允许EKS服务扮演该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 为该角色附加
AmazonEKSClusterPolicy权限(你已有的权限列表中包含该策略,确保正确绑定)。 - 执行命令更新EKS集群的角色关联:
等待集群配置更新完成(可通过aws eks update-cluster-config --name <你的集群名称> --role-arn <新创建角色的ARN>aws eks describe-cluster --name <集群名称>查看状态)。
2. 修复RBAC授权规则
创建以下RBAC配置文件,为kube-apiserver-kubelet-client用户授予访问kubelet接口的权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:kube-apiserver-kubelet-api-access rules: - apiGroups: [""] resources: ["nodes/proxy", "nodes/log", "nodes/stats", "nodes/spec", "nodes/metrics"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:kube-apiserver-kubelet-api-access roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:kube-apiserver-kubelet-api-access subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: kube-apiserver-kubelet-client
执行命令应用配置:
kubectl apply -f <文件名>.yaml
3. 验证修复
执行日志查看命令测试:
kubectl logs <Pod名称> -n <命名空间>
同时检查RBAC绑定状态:
kubectl get clusterrolebinding system:kube-apiserver-kubelet-api-access
内容的提问来源于stack exchange,提问作者ANKUSH SHARMA
相关产品推荐
相关产品推荐

