AWS EKS中Caddy LoadBalancer Service外部IP处于Pending状态求助
AWS EKS中Caddy LoadBalancer Service External IP一直Pending的问题
我是AWS新手,尝试把应用部署到AWS EKS集群,其他资源都创建正常,但Caddy Server的LoadBalancer Service始终无法获取External IP,一直处于Pending状态。执行kubectl describe service caddy得到如下输出:
名称: caddy 命名空间: default 标签: app=caddy 注解: service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-type: external 选择器: app=caddy 类型: LoadBalancer IP族策略: SingleStack IP族: IPv4 IP: 10.100.4.149 IP列表: 10.100.4.149 端口: http 80/TCP 目标端口: 80/TCP 节点端口: http 31064/TCP 端点: 192.168.26.17:80 端口: https 443/TCP 目标端口: 443/TCP 节点端口: https 30707/TCP 端点: 192.168.26.17:443 会话亲和性: None 外部流量策略: Cluster 事件: 类型 原因 时长 来源 消息 ---- ------ ---- ---- ------- 正常 正在确保负载均衡器 16m service-controller 正在确保负载均衡器 警告 构建模型失败 15m service 构建模型失败,原因是WebIdentityErr: 无法获取凭证 由以下原因导致: InvalidIdentityToken: 令牌受众不正确 状态码: 400, 请求ID: dd76289e-ca16-48e5-8985-3a4fc1b64f43 警告 构建模型失败 7m49s service 构建模型失败,原因是WebIdentityErr: 无法获取凭证 由以下原因导致: InvalidIdentityToken: 令牌受众不正确 状态码: 400, 请求ID: 62ed516f-c505-4bc8-979f-74edc449217e
问题分析
从事件日志的错误信息可以明确,核心问题是Web身份令牌的受众(audience)不匹配,导致服务无法获取AWS凭证,进而无法创建对应的负载均衡器。
解决步骤
- 检查EKS集群的IAM OIDC提供商配置
- 执行
aws eks describe-cluster --name <你的集群名称> --query "cluster.identity.oidc.issuer"获取集群的OIDC issuer地址 - 登录IAM控制台,确认已创建对应OIDC提供商,且提供商的受众与上述issuer地址完全一致
- 执行
- 验证服务账户关联的IAM角色信任策略
- 找到Caddy使用的服务账户,执行
kubectl get sa <服务账户名称> -o yaml查看eks.amazonaws.com/role-arn注解中的IAM角色ARN - 进入IAM控制台查看该角色的信任策略,确保策略的
Condition部分包含"StringEquals": {"oidc.eks.<区域>.amazonaws.com/id/<集群OIDC ID>:aud": "sts.amazonaws.com"},同时确认账户ID或组织ID配置正确
- 找到Caddy使用的服务账户,执行
- 确认令牌受众设置
如果是手动配置的Web身份令牌,确保令牌的aud字段值为sts.amazonaws.com,这是AWS STS服务要求的标准受众 - 重新触发负载均衡器创建
删除当前的Caddy Service,执行kubectl delete service caddy,然后重新应用Service配置文件,让控制器重新尝试创建负载均衡器
内容的提问来源于stack exchange,提问作者Ilias Elbadaoui
相关产品推荐
相关产品推荐

