首页 > 解决方案 > 相同角度应用的两个不同域和路径

问题描述

我已经在 Kubernetes 集群中设置了一个有角度的 docker 应用程序(使用 nginx 为其提供服务)。在 Kubernetes 中,我有一个入口控制器(来自 kubernetes 社区的那个),它将路由来自以下域的流量:

a) https://app.somedomain.com 和 b) https://saas-customer.somedomain.com/app

到同一个角度容器。这个想法是个人用户可以使用 a) 而公司用户/客户可以使用 b)。我为 a) 设置了以下入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend-ingress
  annotations:  
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - app.somedomain.io
    secretName: tls-secret
  rules:
  - host: app.somedomain.io
    http:
      paths:
      - backend:
          serviceName: frontend-service
          servicePort: 80

这对于 b)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend-ingress-wild
  annotations:  
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - somedomain.io
    - '*.somedomain.io'
    secretName: tls-secret
  rules:
  - host: '*.somedomain.io'
    http:
      paths:
      - path: /app
        backend:
          serviceName: frontend-service
          servicePort: 80

a) 按预期工作。对于 b),问题是 index.html 已提供服务,但它引用了来自“/”的资产。基本 href 设置为 / 角度。

src="polyfills.7037a817a5bb670ed2ca.js"

但我无法更改基本 href,因为在一种情况下它应该是“/”,而在另一种情况下应该是“/app”,但仍然应该从一个位置提供所有资产。我不知道我是否需要为 angular 添加特定的路由才能使其正常工作,或者尝试在 ingress/nginx 端摆弄以解决这个挑战。

标签: angularkubernetesnginx-ingress

解决方案


您想从“/”提供像 *.j​​s 文件这样的资产吗?您可以在第二个入口中使用以下注释来执行此操作:

nginx.ingress.kubernetes.io/configuration-snippet: |
  rewrite ^/app/(.*\.js)$ /$1 break;

这样,您的应用程序将从 /app 目录和您的 js 文件提供服务 - 从根目录如下:

/app/index.html -> /app/index.html
/app/index.js -> /index.js

这是你想要达到的目标吗?


推荐阅读