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

时间:2018-07-18 22:07:27

标签: kubernetes next.js kubernetes-ingress

所以我有一个有趣的用例。我正在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 个答案:

答案 0 :(得分:1)

很遗憾,您正在使用内置的NGINX Ingress控制器,但没有这种功能。

我的建议是,在负担得起的情况下使用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