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

AWS Ingress控制器部署报错NoCredentialProviders问题求助

解决AWS ALB Ingress Controller NoCredentialProviders错误

问题根源

报错NoCredentialProviders: no valid providers in chain说明AWS Load Balancer Controller无法获取有效AWS凭证调用API创建ALB。在EKS集群中,正确的权限配置方式是IAM Roles for Service Accounts (IRSA),而非直接设置环境变量。你通过Helm安装控制器时仅创建了ServiceAccount,但未关联具备所需权限的IAM角色,导致权限缺失。

解决步骤

1. 创建ALB控制器所需IAM权限策略

创建JSON策略文件alb-controller-policy.json,包含控制器操作AWS资源的必要权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAddresses",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeInternetGateways",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeTags",
                "ec2:GetCoipPoolUsage",
                "ec2:DescribeCoipPools",
                "elasticloadbalancing:DescribeLoadBalancers",
                "elasticloadbalancing:DescribeLoadBalancerAttributes",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeListenerCertificates",
                "elasticloadbalancing:DescribeSSLPolicies",
                "elasticloadbalancing:DescribeRules",
                "elasticloadbalancing:DescribeTargetGroups",
                "elasticloadbalancing:DescribeTargetGroupAttributes",
                "elasticloadbalancing:DescribeTargetHealth",
                "elasticloadbalancing:CreateLoadBalancer",
                "elasticloadbalancing:CreateTargetGroup",
                "elasticloadbalancing:CreateListener",
                "elasticloadbalancing:CreateRule",
                "elasticloadbalancing:ModifyLoadBalancerAttributes",
                "elasticloadbalancing:ModifyTargetGroup",
                "elasticloadbalancing:ModifyTargetGroupAttributes",
                "elasticloadbalancing:AddTags",
                "elasticloadbalancing:RemoveTags",
                "elasticloadbalancing:RegisterTargets",
                "elasticloadbalancing:DeregisterTargets",
                "elasticloadbalancing:SetIpAddressType",
                "elasticloadbalancing:SetSecurityGroups",
                "elasticloadbalancing:SetSubnets",
                "elasticloadbalancing:DeleteLoadBalancer",
                "elasticloadbalancing:DeleteTargetGroup",
                "elasticloadbalancing:DeleteListener",
                "elasticloadbalancing:DeleteRule"
            ],
            "Resource": "*"
        }
    ]
}

执行命令创建IAM策略:

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://alb-controller-policy.json

2. 创建IAM角色并配置信任关系

先获取EKS集群的OIDC提供商URL:

aws eks describe-cluster --name sample-cluster --query "cluster.identity.oidc.issuer" --output text

输出格式类似:https://oidc.eks.ap-south-1.amazonaws.com/id/EXAMPLEOIDCIDENTIFIER

创建信任关系文件trust-policy.json,替换OIDC_PROVIDER为上面的输出,ACCOUNT_ID为你的AWS账号ID:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/OIDC_PROVIDER"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "OIDC_PROVIDER:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
                }
            }
        }
    ]
}

创建IAM角色:

aws iam create-role \
    --role-name AmazonEKSLoadBalancerControllerRole \
    --assume-role-policy-document file://trust-policy.json

3. 关联IAM策略到角色

aws iam attach-role-policy \
    --policy-arn arn:aws:iam::ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
    --role-name AmazonEKSLoadBalancerControllerRole

4. 绑定ServiceAccount与IAM角色

给已创建的ServiceAccount添加权限注释,替换ROLE_ARN为上面创建的角色ARN:

kubectl annotate serviceaccount aws-load-balancer-controller \
    -n kube-system \
    eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/AmazonEKSLoadBalancerControllerRole

5. 重启控制器Pod加载新权限

kubectl rollout restart deployment aws-load-balancer-controller -n kube-system

6. 验证Ingress状态

等待3-5分钟后,查看Ingress的Address字段是否生成:

kubectl describe ingress ingress-srv-eks

额外检查点

  • 若EKS集群未启用OIDC提供商,先执行以下命令启用:
    eksctl utils associate-iam-oidc-provider --cluster sample-cluster --approve
    
  • 检查控制器Pod是否正常运行:
    kubectl get pods -n kube-system | grep aws-load-balancer-controller
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:43:10