我正在使用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应用程序在加载依赖项时遇到了麻烦,您只能看到纯文本。
谢谢
答案 0 :(得分:0)
自从您使用istio之后,您是否在集群中启用了sidecar injection?
是否有一种方法可以重新路由Web应用程序,使其不再尝试从基本域中加载依赖项,并以“ / ui”作为前缀,以使其能够加载?
如果我对您的理解正确,则可以使用虚拟服务中存在的重写功能。
中找到了一个很好的例子