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