首页 文章

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

提问于
浏览
0

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

我的问题来自于我需要一种方法来区分服务及其对_next文件的请求 . 所以我实现了NextJS的assetPrefix功能,它在开发中完美运行,在_next前面附加我的前缀,所以请求看起来像 .../${PREFIX}/_next/... . 这样我就可以根据前缀为我的集群上的相应服务设置入口和路由文件 . 我按照本指南设置了Kubernetes Ingress控制器: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/... 发出请求,因此他们无法找到正确的文件而且没有任何工作正常 . 我似乎无法弄清楚发生了什么 . 有人有主意吗?提前致谢!

1 回答

  • 1

    你正在使用内置的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
    

相关问题