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

EKS集群EBS CSI驱动基于服务账号IAM角色存证失败求助

排查EBS CSI驱动IRSA凭证关联问题的步骤

从PVC报错信息来看,核心问题是EBS CSI控制器无法获取有效AWS凭证(NoCredentialProviders: no valid providers in chain),针对你采用的IAM Role for Service Account(IRSA)机制,按以下步骤排查:

1. 确认StorageClass配置有效性

先解决报错里的storageclass.storage.k8s.io "ebs-sc" not found警告,执行命令检查目标StorageClass是否存在且配置正确:

kubectl get storageclasses.storage.k8s.io ebs-sc -o yaml

需确认:

  • provisioner字段值为ebs.csi.aws.com
  • 若使用延迟绑定(volumeBindingMode: WaitForFirstConsumer),需确保Pod已调度到节点(当前日志显示已选节点,此条件满足)

2. 验证IRSA角色与ServiceAccount的绑定关系

EBS CSI控制器默认使用kube-system命名空间下的ebs-csi-controller-sa服务账号,检查其是否关联了正确的IAM角色:

kubectl get serviceaccount ebs-csi-controller-sa -n kube-system -o yaml

查看输出中的metadata.annotations是否包含eks.amazonaws.com/role-arn,且ARN指向正确的IAM角色。

检查IAM角色的信任策略

登录AWS控制台或使用AWS CLI查看该IAM角色的信任策略,确保其允许EKS OIDC提供商为指定服务账号扮演角色:

aws iam get-role --role-name YOUR_EBS_CSI_IAM_ROLE_NAME --query "Role.AssumeRolePolicyDocument"

信任策略需包含类似如下内容(替换占位符为你的集群信息):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::YOUR_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_REGION.amazonaws.com/id/YOUR_OIDC_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.YOUR_REGION.amazonaws.com/id/YOUR_OIDC_ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
        }
      }
    }
  ]
}

检查IAM角色的权限策略

确认该IAM角色已附加AmazonEBSCSIDriverPolicy托管策略,或自定义策略包含以下必要权限:

  • ec2:CreateVolume
  • ec2:DeleteVolume
  • ec2:AttachVolume
  • ec2:DetachVolume
  • ec2:DescribeVolumes
  • ec2:DescribeAvailabilityZones
  • ec2:DescribeInstances

3. 确认EKS集群OIDC提供商已配置

IRSA依赖EKS集群的OIDC身份提供商,检查集群是否已配置:

aws eks describe-cluster --name YOUR_CLUSTER_NAME --query "cluster.identity.oidc.issuer"

若输出为空,需先创建OIDC提供商:

eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

4. 验证CSI控制器Pod的凭证挂载与环境变量

检查CSI控制器Pod是否正确加载了IRSA凭证:

  1. 查看运行中的控制器Pod:
kubectl get pods -n kube-system -l app=ebs-csi-controller
  1. 进入其中一个Pod的ebs-plugin容器,检查凭证文件是否存在:
kubectl exec -it ebs-csi-controller-XXXXXX-XXXX -n kube-system -c ebs-plugin -- ls /var/run/secrets/eks.amazonaws.com/serviceaccount/

正常应返回ca.crt和token文件。
3. 检查关键环境变量是否存在:

kubectl exec -it ebs-csi-controller-XXXXXX-XXXX -n kube-system -c ebs-plugin -- env | grep AWS_

需包含AWS_WEB_IDENTITY_TOKEN_FILE和AWS_ROLE_ARN两个变量,且值与配置一致。

5. 重新部署CSI控制器(若配置有误)

如果以上步骤发现配置错误,更新ServiceAccount注释或IAM角色后,重启CSI控制器Pod:

kubectl rollout restart deployment ebs-csi-controller -n kube-system

若使用Helm安装,重新指定IRSA角色ARN后升级:

helm upgrade ebs-csi-driver aws-ebs-csi-driver --namespace kube-system --set serviceAccount.annotations."eks.amazonaws.com/role-arn"="arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_EBS_CSI_IAM_ROLE_NAME"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:48:45