Kubernetes Ingress返回404问题排查求助
Kubernetes Ingress 404 Not Found 问题排查
我正在配置Kubernetes集群的Ingress组件,用Postman测试端点时持续返回404 Not Found错误。已尝试切换HTTP与HTTPS协议测试,问题依旧。之前用localhost测试,现在改为acme.com作为路由URL。相关配置文件如下:
Ingress配置文件
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: 'true' nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: acme.com http: paths: - path: /api/platforms pathType: Prefix backend: service: name: platforms-clusterip-service port: number: 80 - path: /api/c/platforms pathType: Prefix backend: service: name: commands-clusterip-service port: number: 80
部署配置文件
Platforms服务部署
apiVersion: apps/v1 kind: Deployment metadata: name: platforms-depl spec: replicas: 1 selector: matchLabels: app: platformservice template: metadata: labels: app: platformservice spec: containers: - name: platformservice image: revlisc/platformservice:latest --- apiVersion: v1 kind: Service metadata: name: platforms-clusterip-service spec: type: ClusterIP selector: app: platformservice ports: - name: platformservice protocol: TCP port: 80 targetPort: 80
Commands服务部署
apiVersion: apps/v1 kind: Deployment metadata: name: commands-depl spec: replicas: 1 selector: matchLabels: app: commandservice template: metadata: labels: app: commandservice spec: containers: - name: commandservice image: revlisc/commandservice:latest --- apiVersion: v1 kind: Service metadata: name: commands-clusterip-service spec: type: ClusterIP selector: app: commandservice ports: - name: commandservice protocol: TCP port: 80 targetPort: 80
NodePort服务配置
apiVersion: v1 kind: Service metadata: name: platformnpservice-srv spec: type: NodePort selector: app: platformservice ports: - name: platformservice protocol: TCP port: 80 targetPort: 80
排查与解决步骤
本地DNS映射配置
编辑本地hosts文件,添加acme.com到Kubernetes节点IP的映射:# Windows路径:C:\Windows\System32\drivers\etc\hosts # Linux/macOS路径:/etc/hosts <你的K8s节点IP> acme.com没有该映射的话,请求无法指向集群Ingress控制器。
Ingress控制器状态验证
执行命令确认Ingress控制器Pod正常运行:kubectl get pods -n ingress-nginx若Pod未就绪,先修复Ingress控制器部署。
Ingress路径规则调整
当前配置的rewrite-target: /结合Prefix路径类型会导致路径匹配异常。比如请求acme.com/api/platforms/v1会被重写为/v1,若后端服务期望原路径则返回404。建议修改Ingress配置:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: 'true' nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - host: acme.com http: paths: - path: /api/platforms(/|$)(.*) pathType: ImplementationSpecific backend: service: name: platforms-clusterip-service port: number: 80 - path: /api/c/platforms(/|$)(.*) pathType: ImplementationSpecific backend: service: name: commands-clusterip-service port: number: 80该配置会将
/api/platforms/xxx重写为/xxx,适配后端服务的接口路径;若后端服务接口本身包含/api/platforms,则移除rewrite-target注解即可。后端服务可达性测试
在集群内部测试后端Service是否正常响应:# 临时启动busybox Pod进入集群网络 kubectl run -it --rm busybox --image=busybox:1.28 -- sh # 测试platforms服务接口 wget -qO- http://platforms-clusterip-service/api/platforms # 测试commands服务接口 wget -qO- http://commands-clusterip-service/api/c/platforms若此处返回404,说明问题出在后端服务本身,需检查服务的接口路径配置。
Ingress资源状态检查
执行命令确认Ingress资源已绑定正确的IP:kubectl get ingress ingress-srv确保
ADDRESS字段显示Ingress控制器的IP或负载均衡器IP。
内容的提问来源于stack exchange,提问作者Revlisc
相关产品推荐
相关产品推荐

