AWS EKS中Nginx Ingress畸形请求的排查与解决建议
排查EKS中Nginx Ingress频繁出现的\x00格式错误请求
一、排查请求来源
- 定位集群内源Pod:日志中的
10.0.7.208、10.0.8.6是集群内部Pod的IP,执行以下命令找到对应Pod:
通过返回结果查看Pod所属命名空间、名称及关联的应用资源(Deployment/StatefulSet)。kubectl get pods -o wide --all-namespaces | grep 10.0.7.208 - 检查应用行为:找到可疑Pod后,查看其应用日志,确认是否存在错误的请求逻辑(比如误发送空HTTP请求);同时检查该应用的健康检查配置,是否存在路径或请求格式错误。
- 抓包分析请求细节:在Nginx Ingress控制器Pod内执行抓包命令,捕获源IP的请求内容:
导出抓包文件后用Wireshark分析,确认请求的完整结构,判断是恶意请求还是应用bug。tcpdump -i any host 10.0.7.208 and port 80 -w empty-requests.pcap - 验证负载均衡流量:如果怀疑是外部流量穿透到集群内部,检查AWS ALB/NLB的访问日志,确认是否有对应请求记录;若日志仅存在集群内IP,可排除外部来源。
二、问题解决建议
- 修复应用请求逻辑:若排查确认是某应用的代码bug导致发送空请求,修复代码确保生成符合HTTP规范的请求。
- 修正健康检查配置:如果是应用健康检查配置错误(比如配置了空请求路径),调整健康检查的请求方法和路径,使用合法的GET/HEAD请求。
- 在Ingress中拦截无效请求:通过Nginx Ingress的自定义配置拦截空请求,在Ingress资源中添加
server-snippet注解:
该配置会直接断开空请求的连接,避免日志被无效请求填充。annotations: nginx.ingress.kubernetes.io/server-snippet: | if ($request = "\x00") { return 444; } - 限制源IP访问:对于非必要的内部服务,在Ingress中配置IP白名单,仅允许合法的Pod IP或服务网段访问:
annotations: nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.1.0/24,10.0.2.0/24" - 升级Nginx Ingress版本:如果使用的是较旧版本的Nginx Ingress Helm Chart,升级到最新稳定版,部分旧版本可能存在对空请求处理的兼容性问题。
内容的提问来源于stack exchange,提问作者Ahmed Ihab
相关产品推荐
相关产品推荐

