[英]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.