You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS K8s集群Nginx Ingress Controller绑定废弃ELB域名仍收流量问题咨询

问题原因

为什么废弃DNS无法解析但Ingress Controller仍能收到流量

你看到的流量是通过你账号下那个正常运行的原有NLB进入集群的,和Service里显示的废弃ELB DNS没有关系:

  • k8s的Service控制器持续尝试为ingress-nginx-controller新建负载均衡,但因为报错中提到的目标组已经被你原有的NLB绑定,AWS不允许同一个目标组关联多个LB,所以新建LB流程一直失败,Service中留存的LoadBalancer Ingress字段是创建失败的无效LB的DNS,自然无法解析,也不存在于AWS控制台。
  • 原有的NLB一直正常绑定对应目标组,你业务侧的域名应该是解析到了这个原有NLB的DNS上,所以用户访问流量可以正常到达Ingress Controller,日志才会显示有正常流量。
  • Ingress资源里填充的废弃DNS是控制器直接同步的Service字段值,不影响实际流量转发逻辑。

解决方案

要让Ingress Controller使用原有NLB的DNS,只需让k8s Service控制器复用你现有的NLB,不再尝试新建LB,操作步骤如下:

  1. 登录AWS控制台,找到你当前正常使用的NLB,复制它的ARN,同时确认该NLB绑定的目标组和报错信息中提到的目标组ARN完全一致。
  2. 编辑Ingress Controller的Service配置:
kubectl -n ingress-nginx edit svc ingress-nginx-controller
  1. 在metadata.annotations字段下添加以下注解(替换为你自己的NLB ARN):
metadata:
  annotations:
    # 声明要复用的现有LB的ARN
    service.beta.kubernetes.io/aws-load-balancer-arn: "arn:aws:elasticloadbalancing:ap-northeast-2:你的账号ID:loadbalancer/net/你的NLB名称/xxxxxx"
    # 确认LB类型为NLB,和你现有LB属性保持一致
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    # 如果你的NLB是公网类型,补充这个注解
    service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
  1. 保存退出后,等待1-2分钟,查看Service的事件是否还报同步错误:
kubectl -n ingress-nginx describe svc ingress-nginx-controller

如果不再出现SyncLoadBalancerFailed报错,且LoadBalancer Ingress字段已经更新为你原有NLB的DNS,说明配置生效。
5. 后续所有新建的Ingress资源都会自动填充正确的NLB DNS,存量Ingress的地址字段也会被控制器自动更新。

额外注意事项

  • 确保k8s集群控制面的IAM角色拥有操作该NLB的相关权限,包括负载均衡的查询、修改、目标组绑定等权限。
  • 不要手动删除该NLB或者修改它和对应目标组的绑定关系,否则会导致集群入口流量中断。

内容的提问来源于stack exchange,提问作者JSH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:54:02