EKS中应用Ingress后未创建NLB 求助排查
排查NLB未创建的可能原因
以下是针对该问题的具体排查方向:
1. 错误使用Service专属注解
你配置的service.beta.kubernetes.io/aws-load-balancer-type: "nlb"是Kubernetes Service的专属注解,不适用于Ingress资源。AWS Load Balancer Controller创建NLB的正确Ingress注解应为:
alb.ingress.kubernetes.io/load-balancer-type: nlb
替换掉原配置中的service.beta.kubernetes.io/aws-load-balancer-type注解。
2. 未指定匹配的IngressClass
AWS Load Balancer Controller默认仅处理带有指定ingressClassName的Ingress资源:
- 先确认集群中存在名为
alb的IngressClass资源(与控制器默认配置的--ingress-class参数一致) - 在Ingress的spec字段中添加:
spec: ingressClassName: alb
3. 控制器未监听kube-system命名空间
若AWS Load Balancer Controller部署时通过--watch-namespace参数限制了监听范围,而kube-system不在其中,控制器会忽略该命名空间下的Ingress。检查控制器的部署参数,确保包含kube-system,或移除该参数以监听所有命名空间。
4. 后端服务无可用端点
如果Ingress关联的echoserver服务没有对应的Pod端点(执行kubectl get endpoints echoserver -n kube-system查看),控制器可能不会创建负载均衡器。确认服务已正确关联运行中的Pod。
5. 控制器版本不支持Ingress创建NLB
AWS Load Balancer Controller v2.4.0及以上版本才支持通过Ingress资源创建NLB。检查控制器版本,若版本过低需升级。
6. 注解格式或冲突问题
- 确保
listen-ports的JSON格式正确,实际应用时使用未转义的格式:
alb.ingress.kubernetes.io/listen-ports: '[{"TCP": 80}, {"TCP": 9093}]'
- 移除
alb.ingress.kubernetes.io/scheme注解,NLB无需该配置,避免可能的参数冲突。
内容的提问来源于stack exchange,提问作者CuriousMind
相关产品推荐
相关产品推荐

