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

Helm安装Ingress-Nginx后访问LoadBalancer外部IP返回404 Not Found问题排查求助

Ingress-Nginx访问LoadBalancer IP返回404 Not Found的原因及解决办法

问题背景

你已经通过以下Helm命令成功部署了Ingress-Nginx控制器:

helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--version 4.2.0 \
--set controller.ingressClass=nginx \
--set rbac.create=true \
--values /tmp/ingress-nginx.yaml

所有资源状态正常:

[rke@k8gui apps]$ kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-248rc 1/1 Running 0 3m15s
pod/ingress-nginx-controller-hpv8h 1/1 Running 0 3m15s
pod/ingress-nginx-controller-jwzjn 1/1 Running 0 3m15s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.43.117.177 192.168.33.100 80:31678/TCP,443:32340/TCP 3m4s
service/ingress-nginx-controller-admission ClusterIP 10.43.119.134 <none> 443/TCP 3m4s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/ingress-nginx-controller 3 3 3 3 3 kubernetes.io/os=linux 3m4s

但访问http://192.168.33.100时返回404:

404 Not Found
404 Not Found

nginx

核心原因

Ingress-Nginx本质上是反向代理控制器,它本身不提供任何默认的后端服务。它必须依赖Kubernetes的Ingress资源来定义路由规则:告诉它“收到某个路径的请求时,转发到哪个后端Service”。当你直接访问LoadBalancer IP时,没有任何匹配的Ingress规则,所以Nginx会返回404。


解决步骤

1. 检查现有Ingress资源

首先确认集群中是否已经配置了Ingress资源:

kubectl get ingress --all-namespaces

如果输出为空,说明你还没有配置任何路由规则,需要继续下一步。

2. 部署测试用后端服务

先创建一个简单的Nginx服务作为测试后端:

# 部署Deployment
kubectl create deployment test-nginx --image=nginx
# 暴露为Service
kubectl expose deployment test-nginx --port=80 --target-port=80

3. 创建匹配的Ingress资源

创建一个test-ingress.yaml文件,内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx  # 必须和你安装时设置的controller.ingressClass一致
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: test-nginx
            port:
              number: 80

应用这个Ingress资源:

kubectl apply -f test-ingress.yaml

4. 验证访问

等待1-2分钟让Ingress规则生效,再次访问http://192.168.33.100,就能看到Nginx的默认欢迎页面了。


额外检查点(如果已经配置Ingress但仍报错)

  • 确认Ingress资源的ingressClassName字段值为nginx(和你Helm安装时的--set controller.ingressClass=nginx一致),Ingress-Nginx只会处理匹配这个类名的Ingress资源。
  • 检查后端Service是否正常运行:kubectl get service test-nginx,确保它的状态正常。
  • 查看Ingress-Nginx控制器的日志,排查路由匹配问题:
    kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:04:06