首页 > 解决方案 > 带有 IRSA 授权错误的 AWS ALB 入口控制器

问题描述

我正在尝试使用IRSA方法而不是 kube2iam 设置 AWS ALB 入口控制器。然而,缺少一些文档,所以我走到了死胡同。

到目前为止我做了什么:

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

eksctl create iamserviceaccount --name alb-ingress --namespace default --cluster devops --attach-policy-arn arn:aws:iam::112233445566:policy/eks-ingressController-iam-policy-IngressControllerPolicy-1111111111 --approve

kubectl apply -f rbac-role.yaml

到这里为止的一切都部署得很好。现在我尝试部署我的 Ingress 服务,但出现此错误(在控制器日志中)

kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to failed to get AWS tags. Error: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/eksctl-devops-nodegroup-ng-1-work-NodeInstanceRole-J08FDJHIWPI7/i-000000000000 is not authorized to perform: tag:GetResources\n\tstatus code: 400, request id: 94d614a1-c05d-4b92-8ad6-86b450407f6a"  "Controller"="alb-ingress-controller" "Request"={"Namespace":"superset","Name":"superset-ingress"}

显然,该节点没有创建 ALB 的适当权限,我想如果我将我的策略附加到日志中所述的角色,它将起作用。但这违背了使用 IRSA 方法的全部目的,对吗?

我期望 Ingress Controller pod 需要适当的权限 - 通过使用服务帐户 - 来创建 ALB 而不是节点。我在这里错过了什么吗?

标签: amazon-web-serviceskuberneteskubernetes-ingressamazon-eks

解决方案


使用此控制器的 v1.1.8 版本时,我遇到了类似的错误(不完全相同):

kubebuilder/controller "msg"="Reconciler
error"="failed get WAFv2 webACL for load balancer arn:aws:elasticloadbalancing:...: AccessDeniedException: User: arn:aws:sts:::assumed-role/eks-node- group-role/ 无权执行:wafv2:GetWebACLForResource 资源:arn:aws:wafv2:us-east-2::regional/webacl/*\n\tstatus 代码:400,请求 ID:..."
" controller"="alb-ingress-controller" "request"={"Namespace":"default","Name":"aws-alb-ingress"}

我会添加它,因为我认为它可以帮助在相同错误消息下搜索的人。

上述错误的原因是该控制器的v1.1.7版本需要节点组角色策略中的新 IAM 权限 *PolicyALBIngress

(!) 请注意,即使不使用 wafv2 注释,也需要新的 IAM 权限。

解决方案 1

wafv2允许操作部分添加到策略中:

{
  "Effect": "Allow",
  "Action": [
    "wafv2:GetWebACL",
    "wafv2:GetWebACLForResource",
    "wafv2:AssociateWebACL",
    "wafv2:DisassociateWebACL"
  ],
  "Resource": "*"
}

解决方案 2

WAFV2 支持可以通过这里提到的控制器标志来禁用。

A) 如果您通过 kubectl 安装它,请添加- --feature-gates=waf=false到该spec -> containers -> args部分。

B) 如果通过 helm 安装,请添加--set extraArgs."feature-gates"='waf=false'helm upgrade 命令。


请注意,此要求已在 eksctl工具中进行了更新(也可在此处查看)。


附加参考


推荐阅读