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
,这些东西可以正常工作。我该怎么办?如果您需要其他信息,请告诉我!
答案 0 :(得分:2)
您使用的是哪个版本的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
答案 1 :(得分:0)
那是因为它正在搜索文件/api/users
,该文件可能不存在。
将文件放置在/api/users/
的服务booknotes-back-end-service
的后端中,例如说user1
,然后将请求明确地传递到/api/users/user1
。
您应该在那里得到200。
答案 2 :(得分:-1)
https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer,在step6部分中尝试将路径/ api替换为/ api / *和/替换为/ *