使用Istio Gateway和VirtualService时,Web应用程序依赖项(JS,CSS)无法加载

时间:2019-11-30 14:41:14

标签: apache-spark kubernetes kubernetes-helm presto istio

我正在使用Helm部署各种软件包(PrestoDB,Apache Spark等),对于这些工具中的每一个,我只是在使用Helm通过基本配置进行部署。

https://github.com/helm/charts/tree/master/stable/spark

https://github.com/helm/charts/tree/master/stable/presto

这两种部署都只使用ClusterIP服务公开Web UI,然后我创建了网关,并且可以使用Istio到Web Apps的VirtualService暴露在集群外部。使用Helm部署PrestoDB之后,这就是我部署的网关和VirtualService:

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: presto-gateway
  namespace: warehouse
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: presto
  namespace: warehouse
spec:
  hosts:
  - "*"
  gateways:
  - presto-gateway
  http:
  - match:
    - uri:
        prefix: /ui
    route:
    - destination:
        host: presto-warehouse
        port:
          number: 8080
EOF

这可以成功工作,但是当我去加载PrestoDB Web UI时,我只看到文本,并且我可以在控制台中看到几乎所有的JS / CSS依赖项都无法加载。我可以看到,当我转到“ ingressgateway / ui”时,只有一些纯文本,并且所有依赖项似乎都是从“ ingressgateway”加载的,而不是“ ingressgateway / ui / vendor / xxx.js”等。是否有一种方法可以重新路由Web应用程序,使其不再尝试从基本域中加载依赖项,并以“ / ui”为前缀对其进行加载?当我尝试启动多个服务并将它们放在入口网关后面时,会发生多种服务-spark和其他服务正常工作,但是Web应用程序在加载依赖项时遇到了麻烦,您只能看到纯文本。

谢谢

1 个答案:

答案 0 :(得分:0)

自从您使用istio之后,您是否在集群中启用了sidecar injection

  

是否有一种方法可以重新路由Web应用程序,使其不再尝试从基本域中加载依赖项,并以“ / ui”作为前缀,以使其能够加载?

如果我对您的理解正确,则可以使用虚拟服务中存在的重写功能。

我在另一个stackoverflow question

中找到了一个很好的例子