paths:
- backend:
serviceName: booknotes-front-end-service
servicePort: 80
path: /
- backend:
serviceName: booknotes-back-end-service
servicePort: 3000
path: /api
这是我的 ingres-nginx 资源中的规则。我尝试将从
/api
开始的所有流量引导到我的后端服务,该服务工作正常,但如果我后端中的某些路由类似于 /api/users ,则它不起作用,我的后端发送响应未找到。当我在本地运行它时,这条路线工作正常。
我还尝试从我的 koa 路由中删除 /api 前缀并将其更改为
/users
然后我还将 path: /api
更改为 path: /users
并且这些东西工作正常。我应该做什么来修复它?
您使用的是哪个版本的 nginx-ingress? 他们改变了定义路径的方式。
https://kubernetes.github.io/ingress-nginx/examples/rewrite/
从版本 0.22.0 开始,使用注释 nginx.ingress.kubernetes.io/rewrite-target 的入口定义不向后兼容以前的版本。在版本 0.22.0 及更高版本中,请求 URI 中需要传递到重写路径的任何子字符串必须在捕获组中显式定义。
例如,您可以使用这样的定义。
kind: Ingress
metadata:
name: some-ingress-name
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: booknotes-front-end-service
servicePort: 80
- path: /api/?(.*)
backend:
serviceName: booknotes-back-end-service
servicePort: 3000
那是因为它正在搜索文件
/api/users
,该文件可能不存在。
将文件放入
/api/users/
,在服务 booknotes-back-end-service
的后端,说 user1
,并明确向 /api/users/user1
进行重新排队。
你应该在那里得到200。
https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer,第 6 节尝试将路径 /api 替换为 /api/* 并将 / 替换为 /*