相同角度应用的两个不同域和路径

时间:2019-05-13 12:17:50

标签: angular kubernetes nginx-ingress

我已经在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,但它引用的是'/'中的资产。 base href设置为/角。

src="polyfills.7037a817a5bb670ed2ca.js"

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

1 个答案:

答案 0 :(得分:0)

您想从“ /”服务您的资产,例如* .js文件?您可以在第二个入口使用以下注释来做到这一点:

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

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

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

这是您想要实现的吗?