入口路由api前缀问题

时间:2019-11-02 16:32:47

标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress

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,这些东西可以正常工作。我该怎么办?如果您需要其他信息,请告诉我!

3 个答案:

答案 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 / *和/替换为/ *