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

Nginx Ingress配置报configuration-snippet含无效proxy_pass且关准入后404如何处理

Nginx Ingress 404 问题排查解决步骤

根因说明

你遇到的准入webhook报错是因为新版ingress-nginx(v0.49及以上)默认开启了annotation安全校验,proxy_pass属于默认拦截的敏感关键字。你直接关闭准入webhook的操作会跳过配置合法性校验,导致Ingress生成的Nginx配置规则异常,最终触发404响应。

排查&解决步骤

  • 修复Ingress规则冲突
    你当前配置中同一路径/同时绑定了服务的80和443两个端口,会导致Nginx location规则匹配优先级混乱,直接删除443端口对应的path配置即可,Ingress本身会负责TLS卸载,后端服务走HTTP 80端口即可完成转发。
  • 修正annotation配置,不要直接关闭准入webhook
    直接关闭准入webhook会带来安全风险,同时会导致非法配置无法被提前拦截,你有两种方案解决之前的snippet校验报错:
    方案1:安装ingress-nginx时放行snippet注解权限,修改helm安装参数如下:
    helm install nginx-ingress ingress-nginx/ingress-nginx \
        --namespace ingress \
        --set controller.replicaCount=2 \
        --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
        --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
        --set controller.allowSnippetAnnotations=true \
        --set controller.config.annotation-value-word-blocklist=""
    
    方案2:替换configuration-snippet为原生annotation实现相同能力,完全不需要自定义snippet:
    把原来的nginx.ingress.kubernetes.io/configuration-snippet注解替换为以下配置即可实现Authorization头透传:
    nginx.ingress.kubernetes.io/proxy-set-header: Authorization $http_authorization
    
  • 验证Ingress资源状态
    执行kubectl describe ingress blabla-data-api-ingress -n <你的服务命名空间>,查看Events字段是否有配置加载报错,同时执行kubectl get ingress确认ADDRESS字段已经正常分配Ingress控制器的IP。
  • 查看Ingress控制器日志
    执行kubectl logs -n ingress <nginx-ingress-controller-pod名称>,查看请求的路由匹配日志,确认你访问的域名、路径能匹配到当前的Ingress规则。
  • 验证后端服务可用性
    执行kubectl port-forward svc/blabla-data-api 8080:80 -n <你的服务命名空间>,本地访问127.0.0.1:8080确认后端服务本身可以正常响应,排除服务自身故障。
  • 校验TLS配置
    如果你是HTTPS访问返回404,执行kubectl get secret blabla-data-api-certification-staging -n <你的服务命名空间>确认证书已正常签发,访问的域名和Ingress配置的host完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:03