Kubernetes 如何使用virtualservice公开grafana prometheus和kiali等仪表盘?

Kubernetes 如何使用virtualservice公开grafana prometheus和kiali等仪表盘?,kubernetes,grafana,istio,istio-kiali,Kubernetes,Grafana,Istio,Istio Kiali,我将我的仪表板公开给.foobar.com没有问题,现在我正试图将上面提到的仪表板公开给www.foobar.com/dashboard/ 我已经使用一个简单的.net后端容器进行了测试,设置了以下VS: apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: whatever spec: hosts: - www.foobar.com gateways: - some-gat

我将我的仪表板公开给
.foobar.com
没有问题,现在我正试图将上面提到的仪表板公开给
www.foobar.com/dashboard/
我已经使用一个简单的.net后端容器进行了测试,设置了以下VS:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: whatever
spec:
  hosts:
  - www.foobar.com
  gateways:
  - some-gateway
  http:
  - match:
    - uri:
        prefix: /bla
    rewrite:
      uri: " "
    route:
    - destination:
        port:
          number: 1234
        host: dummy-service
那么我有:
foobar.com/bla/api/hello
->
dummyservice/api/hello
foobar.com/bla/api/deeper/hello
->
dummyservice/api/deeper/hello
这很好。 然而,如果我将同样的方法应用于这些仪表板,则什么都不起作用! 以下是我对仪表板的设置:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: dashboards
  namespace: istio-system
spec:
  hosts:
  - www.foobar.com
  gateways:
  - default/somegateway
  http:
  - name: grafana
    match:
    - uri:
        prefix: /dashboards/grafana
    rewrite:
      uri: /
    route:
    - destination:
        port:
          number: 80
        host: grafana.grafana.svc.cluster.local
  - name: prometheus
    match:
    - uri:
        prefix: /dashboards/prometheus
    rewrite:
      uri: "/"
    route:
    - destination:
        port:
          number: 9089
        host: prometheus-server.prometheus.svc.cluster.local
  - name: kubernetes-dashboard
    match:
    - uri:
        prefix: "/dashboards/kubernetes"
    rewrite:
      uri: " "
    route:
    - destination:
        port:
          number: 8443
        host: kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local
  - name: kubernetes-dashboard
    match:
    - uri:
        prefix: "/dashboards/kiali/"
    rewrite:
      uri: /
    route:
    - destination:
        port:
          number: 20001
        host: kiali.istio-system.svc.cluster.local
正如有人提到的,
/
存在一个已知的问题,因此您可以看到我对这两个问题都进行了
重写。但仍然没有任何效果。
我得到了大多数404,grafana将我重定向到
www.foobar.com/login


以前有人这样做过吗?我想也许这些仪表板都包含在前端,所以它没有我的.net后端容器那么简单?

如果有人有同样的问题,请看这里:

我已决定:

首先,VirtualDrive是正确的,但请记住在编写部分添加引号:

    rewrite:
      uri: "/"
前缀部分需要用
/

  - name: kubernetes-dashboard
    match:
    - uri:
        prefix: "/kubernetes/"
这里有一个窍门,普罗米修斯和格拉法纳被设计成在根url上工作。但是,它可以在部署.yaml中配置 例如,我希望我的格拉法纳和普罗米修斯分别在
www.foobar.com/grafana/
www.foobar.com/prometheus
工作。 在grafana
deployment.yaml
中,我们需要指定:

          env:
            - name: GF_SERVER_ROOT_URL
              value: 'http://localhost:3000/grafana/'
            - name: GF_SERVER_DOMAIN
              value: localhost
            - name: GF_SERVER_SERVE_FROM_SUB_PATH
              value: 'true'
而在普罗米修斯,它也有相似之处:

- name: prometheus-server
    image: 'quay.io/prometheus/prometheus:v2.24.0'
    args:
      - '--web.enable-lifecycle'
      - '--web.external-url=https://localhost:9090/prometheus/'
      - '--web.route-prefix=/'
对于kiali,诀窍在于虚拟服务,您必须将其重写为
/kiali/

  - name: kiali-dashboard
    match:
    - uri:
        prefix: /kiali/
    rewrite:
      uri: "/kiali/"

你好是否可以尝试为每个添加2个uri匹配项:例如“/dashboards/kiali/”和“/dashboards/kiali”(按该顺序),然后重写为“/”。另外,当你尝试访问这些服务时,你能发布来自kiali/grafana istio代理的日志吗?另外,请检查:非常确定kiali
grafana会有类似的情况。grafana将我重定向到www.foobar.com/login
这就是应用程序的配置方式,我已经解释过了。我想基亚利和普罗米修斯也是这样。因此,您的istio配置是正确的,但是如果您想在同一台主机上安装
/dashboards/kiali
和其他应用程序,那么您必须为此配置您的应用程序。感谢@ludovic,我意识到像这些人这样的应用程序需要额外的配置。我已经让普罗米修斯和格拉法纳开始工作了,在我让他们全部工作后,我会回答我的问题。同时感谢@Jakub,我正在努力更改应用程序的配置。