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

通过NodePort类型Ingress Nginx访问K8s应用报404错误求助

排查Ingress Nginx 404问题的步骤

1. 核对Ingress资源核心配置

  • 确认Ingress的spec.rules.host与curl请求的hello-world.info完全一致,注意拼写、大小写无偏差
  • 检查spec.rules.http.paths配置:
    • path是否为预期路径(比如/)
    • pathType建议设为Prefix或Exact,避免使用ImplementationSpecific引发匹配问题
    • backend.service.name必须与你的Hello World Service名称完全匹配
    • backend.service.port.number填写的是Service暴露的端口(而非Pod的8080,若Service用80映射Pod的8080,此处填80)
  • 执行命令查看Ingress状态及事件:
    kubectl describe ingress <你的Ingress名称>
    
    重点看Events字段,是否存在找不到Service、端口不匹配等报错

2. 确认Ingress Controller与Ingress的关联

  • 检查Ingress资源是否指定了正确的Ingress Class:
    • 旧版本Controller用注解:kubernetes.io/ingress.class: "nginx"
    • K8S 1.19+用spec.ingressClassName: "nginx"
  • 验证Ingress Controller Pod状态:
    kubectl get pods -n ingress-nginx
    
    确保Pod处于Running状态
  • 查看Controller详细日志,过滤请求路由信息:
    kubectl logs -n ingress-nginx <Controller Pod名称> -f -v=3
    
    确认是否接收到hello-world.info的Host头,以及是否匹配到对应的Ingress规则

3. 验证Service与Pod的关联有效性

  • 核对Service的spec.selector与Pod的metadata.labels完全一致,这是Service发现Pod的核心依据
  • 查看Service的Endpoints状态:
    kubectl describe service <你的Service名称>
    
    Endpoints字段需显示PodIP:8080,若为<none>说明标签匹配失败
  • 在Ingress Controller Pod内直接访问Service,排查网络连通性:
    kubectl exec -n ingress-nginx <Controller Pod名称> -- curl http://<Service集群IP>:<Service端口>/
    
    若能正常返回Hello World,说明Controller到Service的网络无问题

4. 检查节点网络与端口规则

  • 确认节点防火墙(iptables/firewalld)允许30255端口的入站流量,裸金属服务器默认防火墙可能拦截该端口
  • 若在集群外部机器执行curl,需将localhost替换为节点的公网/内网IP,而非本地回环地址
  • 检查kube-proxy生成的NodePort转发规则:
    iptables-save | grep 30255
    
    确认存在对应的转发规则

5. 测试最简Ingress配置

若以上排查无结果,使用最简配置验证:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx" # K8S 1.19+可替换为spec.ingressClassName: "nginx"
spec:
  rules:
  - host: hello-world.info
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello-world-service # 替换为你的Service名称
            port:
              number: 80 # 替换为你的Service端口

应用配置后重新执行curl测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:25:43