Docker Desktop环境Nginx Ingress访问后端Service返回404问题咨询
问题根因
你当前配置的Nginx Ingress默认会将完整的请求路径透传给后端Service,你访问http://localhost/assinaturas/hc/alive时,Ingress转发给svc-assinaturas的路径是/assinaturas/hc/alive,但你的后端服务实际只响应根路径下的/hc/alive接口,不存在/assinaturas/hc/alive这个路径,因此返回404错误。
端口转发场景下你直接访问的是/hc/alive,和后端服务的路径匹配,所以可以正常响应。
解决方案
方案1:添加Ingress重写规则(最常用)
在Ingress的annotations中添加重写注解,同时调整path规则,将匹配到的路径后缀转发到后端服务的根路径:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-be-assinaturas namespace: apps-space annotations: kubernetes.io/ingress.class: "nginx" # 新增重写注解,将匹配到的第二个分组内容作为转发路径 nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - http: paths: # 调整path规则,括号内为正则分组,匹配/assinaturas后的所有路径 - path: /assinaturas(/|$)(.*) pathType: Prefix backend: service: name: svc-assinaturas port: number: 80
修改后重新apply这个Ingress配置,再访问http://localhost/assinaturas/hc/alive就会被转发到后端服务的/hc/alive路径,正常返回响应。
方案2:修改后端服务的上下文路径
如果你的后端服务支持配置全局上下文路径,直接将服务的根路径设置为/assinaturas,无需修改Ingress配置即可正常访问。
内容的提问来源于stack exchange,提问作者Jedi31
相关产品推荐
相关产品推荐

