You need to enable JavaScript to run this app. 多节点AWS EKS集群部署绑定ELB的NGINX Ingress Controller出现节点健康检查失败
优惠活动
大模型
产品
解决方案
定价
更多

多节点AWS EKS集群部署绑定ELB的NGINX Ingress Controller出现节点健康检查失败

问题核心判断

你遇到的ELB健康检查部分节点失败的情况,既不是部署YAML有配置遗漏,也不需要为每个可用区单独部署一套独立的ingress-nginx-controller,问题本质非常明确:

  • AWS EKS中通过K8s Service自动创建的经典ELB,默认会把集群所有节点注册为后端目标,对全部节点上对应的NodePort端口发起健康检查
  • 你用来部署的TLS终止版配置文件默认是单副本Deployment,当前ingress-nginx-controller Pod只调度到了1个节点上,只有这个节点在对应的NodePort端口有服务能响应健康检查,剩下3个没跑Pod的节点根本没在对应端口开监听,自然连续触发健康检查失败阈值,被ELB标记为不健康。
可落地的解决方法

生产场景推荐:把控制器改成DaemonSet部署

  • 完全不需要拆分跨可用区的独立控制器实例,只要把原来的单副本Deployment改成DaemonSet调度就行
  • 调整后集群里每个Ready节点(包括你现有的4个节点)都会自动跑一个ingress-nginx-controller Pod,每个节点对应的NodePort端口都有正常服务响应,所有节点自然能通过ELB的健康检查
  • 这种方案比拆多套独立controller的运维成本低很多,流量转发链路更短,也不会出现跨可用区配置不一致、流量路由错乱的问题
  • 调整的时候可以搭配节点亲和性、容忍规则,避免控制器Pod被调度到带不可调度污点的系统节点上。

临时测试场景:手动调整ELB健康检查规则

如果只是临时测试不需要高可用,可以登AWS控制台找到对应ELB,手动修改健康检查的检测参数,匹配当前实际跑了controller的节点状态。

  • 这种方案绝对不能长期用,因为单副本控制器是单点,一旦Pod漂移到其他节点,原节点的健康检查马上又会报失败。
补充注意点

如果一定要保持Deployment的部署模式不改,必须满足两个要求才能让所有节点通过健康检查:

  • 控制器的副本数大于等于集群总节点数
  • 配置Pod反亲和规则,保证每个节点最多调度一个控制器Pod,避免出现单节点堆多个Pod、其他节点完全没有服务的情况

内容的提问来源于stack exchange,提问作者Jérémy Octeau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 00:24:04