入口路由api前缀问题

问题描述 投票:0回答:3
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
并且这些东西工作正常。我应该做什么来修复它?

kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress
3个回答
8
投票

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


0
投票

那是因为它正在搜索文件

/api/users
,该文件可能不存在。

将文件放入

/api/users/
,在服务
booknotes-back-end-service
的后端,说
user1
,并明确向
/api/users/user1
进行重新排队。

你应该在那里得到200。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.