Kubernetes入口路由到Nextjs应用程序的问题

Kubernetes入口路由到Nextjs应用程序的问题,kubernetes,next.js,kubernetes-ingress,Kubernetes,Next.js,Kubernetes Ingress,所以我有一个有趣的用例。我在Kubernetes群集上运行多个微服务。我的应用程序使用NextJS,它对下一个路由进行内部调用 我的问题来自这样一个事实:我需要一种方法来区分服务和它们对下一个文件的请求。因此,我实现了NextJS的assetPrefix功能,该功能在开发中非常有效,将我的前缀添加到_next前面,使请求看起来像../${prefix}/_next/…。这样,我就可以设置入口并根据前缀将文件路由到集群上的相应服务。我按照本指南设置了Kubernetes入口控制器: 我的入口配置是

所以我有一个有趣的用例。我在Kubernetes群集上运行多个微服务。我的应用程序使用NextJS,它对下一个路由进行内部调用

我的问题来自这样一个事实:我需要一种方法来区分服务和它们对下一个文件的请求。因此,我实现了NextJS的assetPrefix功能,该功能在开发中非常有效,将我的前缀添加到_next前面,使请求看起来像
../${prefix}/_next/…
。这样,我就可以设置入口并根据前缀将文件路由到集群上的相应服务。我按照本指南设置了Kubernetes入口控制器:

我的入口配置是:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dev-ingress
spec:
  rules:
  - host: baseurl.com
    http:
      paths:
      - path: /auth
        backend:
          serviceName: auth-svc
          servicePort: 80
      - path: /static/auth
        backend:
          serviceName: auth-svc
          servicePort: 80
      - path: /login
        backend:
          serviceName: auth-svc
          servicePort: 80
      - path: /settings
        backend:
          serviceName: auth-svc
          servicePort: 80
      - path: /artwork
        backend:
          serviceName: artwork-svc
          servicePort: 80
      - path: /static/artwork
        backend:
          serviceName: artwork-svc
          servicePort: 80

这就是问题所在。现在,一切都已设置好,正确部署,入口正在按照上述指南和使用上述规则运行,我的服务正在尝试向
../../../../../../../code>而不是
../${PREFIX}/../../../../code>发出请求,因此它们无法找到正确的文件,并且没有任何工作。我似乎不知道发生了什么事。有人有什么想法吗?提前谢谢

您使用的是内置的NGINX入口控制器,不幸的是,它没有这样的功能

我的建议是,如果您负担得起,就使用注释功能

你可以找到

例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    nginx.org/rewrites: "serviceName=tea-svc rewrite=/;serviceName=coffee-svc rewrite=/beans/"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea/
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee/
        backend:
          serviceName: coffee-svc
          servicePort: 80
下面是如何重写到
/tea svc
的请求的URI的示例(请注意,
/tea
请求被重定向到
/tea/

下面是如何重写
/coffee svc
请求的URI的示例(请注意,
/coffee
请求被重定向到
/coffee/


隐马尔可夫模型。。有趣。我仍然不明白为什么
../${PREFIX}/\u next/..
请求被请求为
。/\u next/..
。如果我的应用程序向前缀注释发出了这些请求,那么为什么/在哪里重新编写它呢?同时进行更多的读取,看起来在没有plus的情况下可以进行重写。我用那种方法找到了工作的路线。但是,我的/静态路由仍然有问题。它似乎在某个地方重写请求?
/tea/  ->  /
/tea/abc  ->  /abc
/coffee/  ->  /beans/
/coffee/abc  ->  /beans/abc