K8s中多路由Node.js应用配置Ingress后无法访问子路径问题求解
问题原因
你当前的Ingress配置存在两处错误导致所有请求都返回根路径内容:
nginx.ingress.kubernetes.io/rewrite-target: /$1注解的重写目标引用了捕获组$1,但你配置的path: /*没有对应的正则捕获组,导致$1始终为空,所有请求都会被重写为/传递给后端服务。- 配置了
host: bands.com规则的情况下,直接使用Ingress IP访问不会匹配到该规则,只有将bands.com绑定到Ingress IP后通过域名访问才能命中规则。
解决方案
你的Node.js服务本身就是直接匹配/acdc、/pinkfloyd这类原始路径,不需要路径重写,最简洁的调整方案如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress # 移除不需要的rewrite注解 spec: rules: # 无需域名限制可删除host字段,直接用Ingress IP访问 # - host: bands.com - http: paths: - path: / pathType: Prefix backend: service: name: bands port: number: 8080
该配置会将请求的原始路径原封不动传递给后端服务,完全匹配你Node.js代码里的路由规则。
如果需要保留rewrite规则,调整为如下配置即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: # 无需域名限制可删除host字段 - http: paths: # 增加正则捕获组匹配路径后缀 - path: /(.*) pathType: Prefix backend: service: name: bands port: number: 8080
内容的提问来源于stack exchange,提问作者user9142877
相关产品推荐
相关产品推荐

