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

标签 kubernetes next.js kubernetes-ingress

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

我的问题来自这样一个事实:我需要一种方法来区分服务及其对 _next 文件的请求。因此,我实现了 NextJS 的 assetPrefix 功能,该功能在开发中完美运行,将我的前缀附加在 _next 前面,以便请求看起来像 .../${PREFIX}/_next/...。这样我就可以根据集群上适当服务的前缀设置入口和路由文件。我按照本指南设置了 Kubernetes Ingress Controller :https://akomljen.com/kubernetes-nginx-ingress-controller/

我的入口配置是:

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

所以问题就在这里。现在一切都已设置完毕、正确部署,并且入口正在按照上述指南并使用上述规则运行,我的服务正在尝试向 .../_next/... 发出请求.../${PREFIX}/_next/... 因此他们找不到正确的文件并且没有任何效果。我似乎不明白发生了什么事。有人有主意吗?提前致谢!

最佳答案

您正在使用内置的 NGINX Ingress Controller ,不幸的是,它没有此类功能。

我的建议是使用NGINX Plus Ingress Controller如果您负担得起的话,可以使用注释功能。

您可以找到official example here .

示例:

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/)。

/tea/  ->  /
/tea/abc  ->  /abc

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

/coffee/  ->  /beans/
/coffee/abc  ->  /beans/abc

关于kubernetes - Kubernetes 入口路由到 Nextjs 应用程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411662/

相关文章:

javascript - 如何在生产中获取绝对 URL?

azure - Ingress 不适用于 AKS 的应用程序网关入口 Controller (AGIC) 附加组件

kubernetes - 容器中的容器如何通过名称相互引用?

kubernetes - k8s中admission webhook和controller manager的优先级是什么?

kubernetes - 我如何在 or 条件下使用 kubectl 标签选择器?

docker - 可以在 kubernetes 中将本地镜像用于 pod yaml 吗?

javascript - 类型错误 : Cannot read properties of null (reading 'useState' ) in Next. js

reactjs - NextJS 图片组件路径错误

azure - Azure Kubernetes (AKS) 'Time-out' 会发生什么情况会断开集群中 Pod 进出的连接?

kubernetes - 如何仅使用一个主机名在同一个 kubernetes 集群上部署多个前端应用程序