2
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: /apipath: /users并且这些东西工作正常。我应该怎么做才能修复它?如果您需要更多信息,请告诉我!

4

3 回答 3

6

您使用的是哪个版本的 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

于 2019-11-02T20:37:55.603 回答
0

那是因为它正在搜索/api/users可能不存在的文件。

比如说,/api/users/在服务的后端中放入一个文件,然后显式地向.booknotes-back-end-serviceuser1/api/users/user1

你应该在那里得到200。

于 2019-11-02T17:47:31.083 回答
-1

https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer,第 6 部分尝试将路径 /api 替换为 /api/* 和 / 替换为 /*

于 2019-11-02T16:53:42.220 回答