AWS NLB目标组单节点健康检查失败问题咨询
该问题常见诱因按排查优先级排序如下
- 节点流量拦截规则异常
即使用同一实例模板创建,节点也可能出现规则下发偶发错误:要么是节点本地iptables/nftables规则同步错乱,要么是节点关联的安全组入站规则出现单节点漂移,拦截了NLB健康检查源地址、以及容器内访问节点ingress NodePort端口的流量。排查时先在异常节点本地执行curl 127.0.0.1:<ingress-nginx对应的NodePort>验证,如果本地访问都超时,优先核对安全组入方向是否放通对应NodePort的内网流量,再检查节点iptables nat规则是否正常。 - ingress-nginx控制器Pod未调度到异常节点
如果ingress-nginx副本数不足2,或是配置了节点亲和性、污点容忍规则,导致异常节点上没有运行ingress-nginx-controller Pod,该节点的NodePort转发规则就无法将流量转到可用Pod,访问节点IP自然会超时。这种场景下服务整体可用属于正常现象:NLB健康检查存在判定周期,且另一个节点可正常承载流量,ingress日志只会记录实际转发到后端Pod的请求,不会记录节点层面直接丢包的健康检查流量。执行kubectl get pod -n ingress-nginx -o wide即可确认两个节点是否都存在运行态的controller Pod。 - 异常节点上kube-proxy运行异常
单节点的kube-proxy Pod崩溃、与apiserver连接中断导致规则同步卡住,会直接造成该节点所有NodePort转发规则失效,哪怕集群其他组件运行正常,这个节点也无法响应NodePort层面的请求。排查时可查看异常节点上kube-proxy的容器日志,确认是否存在规则同步失败、连接apiserver超时的报错,同时执行iptables -t nat -L KUBE-NODEPORTS核对是否存在ingress-nginx对应的NodePort转发规则。 - NLB目标组健康检查配置不匹配
如果手动调整过NLB目标组的健康检查参数,可能出现探测端口、路径和ingress-nginx实际暴露的配置不匹配:比如ingress-nginx默认健康检查端点是/healthz,如果修改为其他路径,或是端口错填为实例端口而非NodePort,也可能导致单节点偶发超时被标记为不健康。该原因优先级较低,从容器内curl节点IP已经出现超时的现象来看,大概率是节点层面转发故障,排查完前面三项后再核对目标组配置即可。 - 节点内核网络配置异常
单节点启动时如果net.ipv4.ip_forward参数未正常置为1,或是nf_conntrack表打满导致丢包,也会引发NodePort流量转发超时。可在异常节点执行sysctl net.ipv4.ip_forward确认参数值,再通过dmesg查看内核日志是否存在conntrack表满、网络丢包的相关报错。
内容的提问来源于stack exchange,提问作者Jacob Ma
相关产品推荐
相关产品推荐

