Ingress 和 Angular with namespaces - 如何在不更改 url 的情况下通过 ingress 重新路由到正确的命名空间
Ingress and Angular with namespaces- how to reroute to correct namespace through ingress without changing url
我目前正在构建一个带有 angular 应用程序和 express 后端的 K8s 集群。
集群应该被分成两个命名空间,test 和 prod,每个 ns 中来自前端的请求将转到相应的后端应用程序。因为 angular 在浏览器中运行,我目前正在通过外部入口从 angular 应用程序向后端发送请求,但是由于 angular 环境变量是在构建时设置的,我无法指定prod 和 test 的 backendUrls 不同,因此无论它们来自哪个命名空间,请求都会发送到相同的 url。
我看到一些人解释说 angular 无法在内部到达后端,但找不到任何关于如何整理命名空间路由的信息。有没有办法让入口知道请求来自哪里并相应地重新路由?或者用其他方法解决这个问题。
我的命名空间设置如下:
apiVersion: v1
kind: Namespace
metadata:
name: test
---
apiVersion: v1
kind: Namespace
metadata:
name: prod
并且入口在 prod 命名空间上设置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
name: ingress-service
namespace: prod
spec:
ingressClassName: nginx
rules:
- host: prod.mysite.com
http:
paths:
- backend:
service:
name: dashboard-service
port:
number: 8081
path: /?(.*)
pathType: Prefix
- backend:
service:
name: backend-service
port:
number: 3000
path: /api/?(.*)
pathType: Prefix
在测试命名空间上,它是相同的,但主机:test.mysite.com 和命名空间:prod。在每个命名空间中,都有一个仪表板应用程序和一个带有服务的后端应用程序。
我目前 运行 在 minikube 上使用它,但我预计当它部署在 AWS 上时问题会继续存在。
非常感谢您提供的任何帮助!
你基本上有三个选择:
- 不要在 angular 应用程序中使用完整的 URL,当从 [=22] 的不同 URL 加载时,只需使用 /api/ =].com/test.mysite.com 相对路径将附加到域并解决您的问题
- 您可以通过检查主机名 and/or 端口
动态确定 Angular 中的后端 url
- 您可以创建一个 docker 图像来更改 api url 使用入口点和环境变量 index.html 中定义的值
我目前正在构建一个带有 angular 应用程序和 express 后端的 K8s 集群。
集群应该被分成两个命名空间,test 和 prod,每个 ns 中来自前端的请求将转到相应的后端应用程序。因为 angular 在浏览器中运行,我目前正在通过外部入口从 angular 应用程序向后端发送请求,但是由于 angular 环境变量是在构建时设置的,我无法指定prod 和 test 的 backendUrls 不同,因此无论它们来自哪个命名空间,请求都会发送到相同的 url。
我看到一些人解释说 angular 无法在内部到达后端,但找不到任何关于如何整理命名空间路由的信息。有没有办法让入口知道请求来自哪里并相应地重新路由?或者用其他方法解决这个问题。
我的命名空间设置如下:
apiVersion: v1
kind: Namespace
metadata:
name: test
---
apiVersion: v1
kind: Namespace
metadata:
name: prod
并且入口在 prod 命名空间上设置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
name: ingress-service
namespace: prod
spec:
ingressClassName: nginx
rules:
- host: prod.mysite.com
http:
paths:
- backend:
service:
name: dashboard-service
port:
number: 8081
path: /?(.*)
pathType: Prefix
- backend:
service:
name: backend-service
port:
number: 3000
path: /api/?(.*)
pathType: Prefix
在测试命名空间上,它是相同的,但主机:test.mysite.com 和命名空间:prod。在每个命名空间中,都有一个仪表板应用程序和一个带有服务的后端应用程序。
我目前 运行 在 minikube 上使用它,但我预计当它部署在 AWS 上时问题会继续存在。
非常感谢您提供的任何帮助!
你基本上有三个选择:
- 不要在 angular 应用程序中使用完整的 URL,当从 [=22] 的不同 URL 加载时,只需使用 /api/ =].com/test.mysite.com 相对路径将附加到域并解决您的问题
- 您可以通过检查主机名 and/or 端口 动态确定 Angular 中的后端 url
- 您可以创建一个 docker 图像来更改 api url 使用入口点和环境变量 index.html 中定义的值