← 返回列表

AWS抗投诉服务器 AWS EKS Ingress 创建后 ALB 未生成?AWS Load Balancer Controller 日志排查

分类:AWS账号发布于:2026-08-04

阿里云实名账号

这个问题我在实际项目里见得最多的场景,不是“Ingress 配错了”这么简单,而是控制器没拿到创建权限、子网没识别、账号没过账单校验、IngressClass 不匹配几类问题叠在一起。很多人看到 Kubernetes 里 Ingress 已经创建成功,就默认 AWS 会自动出 ALB,结果等了十几分钟还是空的。

如果你现在的状态是:kubectl get ingress 有资源,但 EXTERNAL-IP 一直为空,AWS 控制台里也没有 ALB,建议不要先改 YAML,先看日志。大多数问题在日志里都能直接定位。

AWS抗投诉服务器 先判断:到底卡在哪一层

现象 常见原因 优先看哪里
Ingress 已创建,ALB 不出现 Controller 未运行 / 未识别 IngressClass / IAM 权限不足 controller 日志、Pod 状态
ALB 创建了一半又消失 子网标签不对、Security Group 冲突、目标组创建失败 controller 日志、AWS CloudTrail
一直提示 reconcile,但没有报错 Ingress 注解不完整、监听器规则不满足、找不到可用子网 controller 日志中的 discover / subnet / rule 相关信息
控制台能看到 ALB,外网访问不了 安全组、子网公网属性、目标组健康检查失败 ALB 安全组、Target Group health check

第一步:直接看 AWS Load Balancer Controller 日志

很多人只看 Kubernetes 事件,实际上真正有用的是控制器日志。先执行:

kubectl -n kube-system get pods | grep load-balancer
kubectl -n kube-system logs deploy/aws-load-balancer-controller --tail=200

重点不是“有没有报错”,而是看报错类型。常见几类信息基本可以直接定因:

  • AccessDenied:IAM 角色权限不够,或者 IRSA 没绑对。
  • failed to auto-discover subnets:子网标签不对,控制器找不到可用子网。
  • no matching subnet:公有/私有子网选择不符合你的 scheme。
  • ingress class is not matched:IngressClass 名称和控制器不一致。
  • could not build model:注解格式错误、目标端口/服务对象不对。

我建议你把日志里这 4 个关键词直接搜一遍:AccessDenied / subnet / ingress class / model。通常十分钟内就能把方向缩小到 1-2 个点。

最常见的 6 个真实原因,不是每个都要改 YAML

1)控制器没正常工作,或者装在错误的命名空间

有些团队 Helm 装完就结束,实际 Pod 处于 CrashLoop、ImagePullBackOff,或者 controller service account 绑定错了。表面上 Ingress 资源正常,实际上没人去监听它。

检查方式:

kubectl -n kube-system get deploy,pod,sa | grep load-balancer
kubectl -n kube-system describe pod -l app.kubernetes.io/name=aws-load-balancer-controller

如果 Pod 没起来,先别折腾 Ingress,先修控制器。

2)IAM / IRSA 没配对,创建权限缺失

这是最容易被忽略的一项。AWS Load Balancer Controller 不是“自动有权限”,它需要明确的 IAM Policy 和 ServiceAccount 绑定。很多账号是从别人模板里复制过来的,OIDC 没建,或者 role ARN 指错,最后日志里就是一堆 AccessDenied。

重点看:

  • 是否启用了 EKS OIDC provider
  • ServiceAccount 是否绑定了正确的 IAM Role
  • 策略里是否包含创建 ELB、TargetGroup、Listener、SecurityGroup 的权限

如果你看到日志类似 “not authorized to perform elasticloadbalancing:CreateLoadBalancer”,基本不用怀疑,先修权限。

AWS抗投诉服务器 3)子网标签不完整,控制器找不到能用的 Subnet

这是 ALB 不生成的高频原因。EKS 里的 Ingress 不是靠“子网存在”就行,而是要看标签是否符合控制器识别规则。很多人只创建了私有子网,忘了打标签,或者把公有/私有混着标。

典型问题:

  • 没有打 kubernetes.io/cluster/cluster-name 相关标签
  • 公有子网缺少面向 ALB 的角色标签
  • 私有子网被误用成公网入口

实际处理顺序:先确认 Ingress 想暴露公网还是内网,再去匹配子网标签,不要反着配。

4)IngressClass 或 annotation 写错,控制器压根没接单

很多案例不是 AWS 的问题,而是 Ingress 对象根本没交给 AWS Load Balancer Controller。比如你装了多个 ingress controller,Nginx 和 AWS 共存时,类名一旦不一致,就会出现“资源创建了,但没人处理”。

建议检查:

kubectl get ingressclass
kubectl describe ingress your-ingress-name

确保 ingressClassName 和实际 controller 对得上。老项目里还常见只写了 annotation,没写 ingressClassName,导致新版本行为不一致。

5)Service 后端端口、Target Type、健康检查不匹配

ALB 能创建出来,但 Target Group 不健康时,表面看像“没生成”。尤其是:

  • Service 端口和容器监听端口不一致
  • 注解里 target-type 选了 ip,却实际网络/安全组没放通
  • 健康检查路径返回 404 或 301,导致全部 unhealthy

这种问题的特征是:ALB 在控制台里能看到,但流量进不来。不要只盯 Ingress,要去看 Target Group health。

6)账号层面被账单、验证或风控卡住

这个是很多人搜索时忽略的点。尤其是新开 AWS 账号,账号没完成付款方式验证、账单状态异常、额度受限,都可能导致资源创建失败或延迟。

我实际遇到过几种情况:

  • 新号绑定了卡,但未完成验证,控制器一直报创建失败
  • 账号有历史欠费,EKS 集群还在,ALB 新建被限制
  • 企业账号审批没走完,IAM 权限看似有,实际被 SCP 拦截

如果你的日志里没有明显权限错误,但 AWS 控制台创建 ALB 一直失败,建议同步检查账单中心、付款方式、组织策略,不要只在集群里排查。

账号开通、实名认证、充值续费:对这类故障影响比你想的大

AWS抗投诉服务器 如果你是新买账号或刚注册不久,先确认三件事:

  • 实名认证/企业认证是否完成:部分地区和支付方式会触发二次审核。
  • 付款方式是否有效:信用卡、借记卡、PayPal 等可用性因地区不同而不同,卡片风控拒绝是常见失败点。
  • 账号是否有余额/账单限制:AWS 这类按量服务不是预付充值模式,但账单状态异常会影响资源创建和续费。

对企业用户来说,最好不要把生产 EKS 和 ALB 放在“刚注册、还在审”的账号里。真实项目里,一旦碰到账单验证失败,排障时间往往比修 YAML 更长。

成本上要怎么判断:Ingress Controller 不收费,ALB 是收费的

很多团队以为“用了 controller 就免费”,这个理解不对。AWS Load Balancer Controller 本身不收费,但它创建出来的 ALB、目标组、LCU、数据处理都会计费。

方案 适合场景 成本特点
ALB + AWS Load Balancer Controller HTTP/HTTPS、路径/域名转发、多服务入口 有固定小时费 + 流量/规则计费,低流量也会有底座成本
NLB TCP/UDP、低层转发、长连接 通常规则更简单,适合不需要七层能力的场景
ClusterIP + 外部反代 测试环境、内部访问 便宜,但运维成本会转移到你自己身上

如果只是做测试环境,很多团队会因为一个 ALB 的持续计费而超预算。尤其是多个环境各自起一个 ALB,月度费用会比你想的快得多。实际落地时,我通常会建议:能合并入口就合并,能内网就别公网暴露

按排障优先级,建议你这样做

  1. 先看 controller Pod 是否正常运行。
  2. 再看日志里有没有 AccessDenied、subnet、ingress class 关键词。
  3. 检查 IAM Role / IRSA / OIDC 是否绑定正确。
  4. 确认子网标签、ALB 公网/内网类型是否匹配。
  5. 检查 Service 端口、目标组健康检查、Security Group 放行。
  6. 最后再去看账单、付款方式、组织策略和账号风控状态。

这个顺序很重要。很多人一上来就删 Ingress 重建,结果问题根源是账号权限或者子网标签,重建十次也没用。

常见问题

Q1:Ingress 已经创建,为什么 ALB 还是不出来?
A:最常见是 controller 没接到请求,或者没有权限创建 ELB。先看日志里的 AccessDenied 和 subnet 相关信息。

Q2:删掉 Ingress 再创建能解决吗?
A:只有在 annotation、ingressClassName 改对之后才有意义。权限、子网标签、账单问题不解决,重建没效果。

Q3:AWS 账号刚开通,能直接上生产吗?
A:不建议。至少先完成付款方式验证、权限边界检查和一次完整的 ALB 创建测试,再上正式流量。

Q4:为什么控制台里看不到创建失败记录?
A:有些失败只会出现在 controller 日志或 CloudTrail 里,不一定在 ECS/EKS 页面直接显示。CloudTrail 很适合查 API 拒绝。

如果你现在只想快速定位,优先看这两条日志

kubectl -n kube-system logs deploy/aws-load-balancer-controller --tail=200 | grep -E "AccessDenied|subnet|ingress class|failed|error"

如果这里出现权限错误,先修 IAM;如果是 subnet 问题,先补标签;如果没有任何报错但还是不生成,回头检查 IngressClass 和账单状态。按这个顺序排,效率最高。

这类问题的本质不是“ALB 没生成”,而是控制器、权限、网络标记、账号状态四层里有一层没打通。只要日志能看懂,通常半小时内就能锁定原因。

阿里云实名账号
Telegram客服客服ID@cloudcup联系
Telegram自助BOT客服ID@juhecloudbot联系