繁体   English   中英

地址 null,用于使用经典 LB 进入 EKS

[英]Address null for ingress in EKS with classic LB

当我创建入口时,它是在没有地址的情况下创建的,当我描述我的入口时,我看到消息

Failed build model due to WebIdentityErr: failed to retrieve credentials
caused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity
  status code: 403, request id: 5423ee08-9a72-47fe-8389-3f50ce78b0e5

当我检查 aws loadbalancer controller 的 pod 日志时,看到类似的错误

{"level":"error","ts":1674658664.611337,"logger":"controller-runtime.manager.controller.ingress","msg":"Reconciler error","name":"catch","namespace":"sa-backup","error":"WebIdentityErr: failed to retrieve credentials\ncaused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus code: 403, request id: b4a791b1-f56b-4d4b-84b4-a7b6bc5ff8b9"}

我可以确认经典负载均衡器创建良好并且 ingressRoutes 正在运行。 只是入口问题 controller

您的 AWS 负载均衡器 Controller 需要访问 AWS API。让 API 访问 EKS 中的 pod 的标准方法是使用 IRSA( https://docs.aws.amazon.com/eks/latest/userguide/iam-roles- for-service-accounts.html ),它允许 Pod 通过集群中的 OIDC 承担角色,并与 AWS API 建立信任关系。这种信任关系需要在 IRSA 工作之前设置( https://docs.aws.amazon.com /emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html )。

您的 AWS LB Controller 尝试担任的 AWS IAM 角色将需要有一个信任策略,该策略允许您的 EKS 集群的 OIDC 终端节点引用 pod 使用的命名空间和 ServiceAccount 名称。

假设您在us-east-2中并且服务帐户位于aws-lbc命名空间中并命名为aws-load-balancer-controller ,则 pod 使用的 ServiceAccount 将需要一个注释来指定要使用的 AWS IAM 角色:

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam:<account number>:role/<iam role name>
  name: aws-load-balancer-controller
  namespace: aws-lbc

AWS IAM 角色的信任策略应如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<account number>:oidc-provider/oidc.eks.us-east-2.amazonaws.com/id/<OIDC endpoint ID>"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-east-2.amazonaws.com/id/<OIDC endpoint ID>:sub": "system:serviceaccount:aws-lbc:aws-load-balancer-controller"
                }
            }
        }
    ]
}

<OIDC endpoint ID>可以从 EKS 集群下的 AWS 控制台检索 Overview -> Details -> OpenID Connect provider URL(它是/id之后的 32 个字符串)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM