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

Nginx Ingress Controller外部访问上游超时、Pod内直连正常问题排查

问题根因分析与解决方案

以下是该场景下按出现概率排序的可能原因及对应处理方案:

1. MTU/MSS不匹配导致大包丢包(最高概率)

  • 触发逻辑:
    • 你手动在Ingress Pod内部执行curl时,仅携带3个基础请求头,整体报文体积很小,小于Pod网络链路的MTU阈值,可正常传输
    • Nginx Ingress转发外部请求时,会默认追加X-Forwarded-For、X-Forwarded-Proto、X-Real-IP等多个代理头,加上原始请求的头信息,整体报文体积变大。如果集群节点防火墙/安全组拦截了ICMP不可达报文,PMTU探测失效,超过MTU的大包会被直接丢弃,最终导致超时
  • 验证方法:
    在Ingress Pod内执行带全量代理头的curl命令模拟转发场景,大概率会复现超时:
    curl -H "Host: test.amazonaws.com.cn" -H "X-Forwarded-For: 10.88.0.1" -H "X-Forwarded-Proto: http" -H "X-Real-IP: 10.88.0.1" http://10.96.175.3
    
  • 修复方案:
    • 调整CNI插件的Pod网络MTU,比如Calico/Flannel将MTU设置为1450,预留隧道封装开销
    • 为Nginx Ingress添加注解nginx.ingress.kubernetes.io/proxy-mss: "1400",强制TCP MSS小于链路MTU阈值

2. IPVS模式下的conntrack条目冲突

  • 触发逻辑:
    若集群kube-proxy使用IPVS模式,Nginx Ingress默认会复用与上游Pod的TCP连接,旧的conntrack条目未及时老化时,新连接如果使用了相同源端口,会被IPVS误判为非法连接丢弃。手动curl使用随机高位源端口,不会命中冲突条目,因此可以正常访问。
  • 修复方案:
    • 升级kube-proxy到1.22及以上版本,该版本修复了多个IPVS conntrack相关的已知bug
    • 为Nginx Ingress添加注解nginx.ingress.kubernetes.io/upstream-keepalive-connections: "0",临时禁用上游连接复用

3. 跨节点网络单向连通

  • 触发逻辑:
    你配置了EchoServer的节点反亲和,每个节点部署1个副本,若非Ingress Pod所在节点的出站规则被防火墙限制,回包无法到达Ingress Pod所在节点,也会出现转发超时。该场景下手动curl异常上游IP也会超时,可先执行该操作排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:01