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

Kubernetes Ingress Nginx返回404问题排查(Les Jackson教程场景)

Ingress Nginx 返回404问题排查与修复

配置中存在3个明确问题,直接对应404故障:

  • Commands服务Dockerfile入口配置错误
    你提供的Commands服务Dockerfile中,启动入口写的是ENTRYPOINT [ "dotnet", "PlatformService.dll" ],Commands服务对应的启动程序集应为CommandsService.dll,当前配置会导致Commands服务容器运行的是PlatformService代码,对应路径请求必然返回404。
  • Ingress资源配置不兼容新版控制器
    你部署的是v1.3.0版本的Ingress Nginx Controller,旧版kubernetes.io/ingress.class: nginx注解已被废弃,控制器不会接管未指定ingressClassName字段的Ingress规则。同时当前rewrite-target配置直接将所有路径重写到根目录,会丢失接口路径前缀,不符合.NET Core路由匹配逻辑。
  • Ingress Controller部署版本不匹配本地环境
    你执行的是云服务商场景的部署清单,本地单机集群(Docker Desktop/Minikube等)需要使用裸机(baremetal)版本的部署清单,否则LoadBalancer类型的控制器服务无法正确绑定本地80/443端口,会出现请求未被控制器正确转发的情况。

修复步骤

1. 修复Commands服务镜像

修改Commands服务的Dockerfile入口配置为正确的程序集:

ENTRYPOINT [ "dotnet", "CommandsService.dll" ]

重新构建Commands服务镜像,更新本地镜像缓存或推送至私有镜像仓库后,滚动更新commands-depl部署。

2. 重新部署适配本地环境的Ingress Nginx Controller

先删除之前错误部署的云版本控制器:

kubectl delete namespace ingress-nginx

部署v1.3.0版本的baremetal适配清单(本地环境专用),部署完成后执行端口映射,将本地80端口转发到控制器服务的80端口:

# 端口映射命令,执行后保持窗口运行
kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 80:80

3. 替换为修正后的Ingress配置

删除原有Ingress资源,应用以下修正后的配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - host: acme.com
    http:
      paths:
      - path: /api/platforms(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: platforms-clusterip-srv
            port:
              number: 80
      - path: /api/c/platforms(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: commands-clusterip-srv
            port:
              number: 80

配置说明:

  • 新增ingressClassName: nginx字段替代废弃的注解,确保控制器接管规则
  • 路径增加正则捕获组,配合rewrite-target: /$2将路径前缀后的真实路径转发给后端服务,避免路径被完全重写丢失
  • 移除废弃的Ingress类注解

4. 连通性验证

先在集群内部验证两个业务服务的可用性,排除业务本身的问题:

# 临时启动curl容器测试Platforms服务
kubectl run curltest --image=curlimages/curl -it --rm -- curl http://platforms-clusterip-srv/api/platforms

# 临时启动curl容器测试Commands服务
kubectl run curltest --image=curlimages/curl -it --rm -- curl http://commands-clusterip-srv/api/c/platforms

两个请求都能正常返回业务数据后,再在本机访问http://acme.com/api/platforms和http://acme.com/api/c/platforms即可正常响应。


补充排查点

  • 用netstat -ano | findstr :80命令确认本地80端口无其他进程占用(除了port-forward进程),排除端口冲突
  • 临时关闭系统代理、VPN软件,避免请求被代理拦截导致无法打到本地端口映射
  • 若WSL2环境运行集群出现端口转发异常,可先直接访问http://localhost/api/platforms测试,排除hosts解析问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:33:26