【问题标题】:How to use virtualservice to expose dashboards like grafana prometheus and kiali?如何使用 virtualservice 来暴露 grafana prometheus 和 kiali 之类的仪表板?
【发布时间】:2021-04-20 23:54:21
【问题描述】:

我的仪表板暴露给<dashboard>.foobar.com 没有问题,现在我正尝试将上面提到的仪表板暴露给www.foobar.com/dashboard/<kiali> 我已经用这个 VS 设置了一个简单的 .net 后端容器进行了测试:

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

正如有人提到的,/ 存在一个已知问题,因此您可以看到我对它们都有 rewrite。但仍然没有任何效果。 我大部分都得到了 404,grafana 将我重定向到www.foobar.com/login

以前有人做过吗?我在想这些仪表板可能包含在前端,所以它不像我的 .net 后端容器那么简单?

【问题讨论】:

  • 嗨。您可以尝试为每个添加 2 个 uri 匹配项吗:例如。 “/dashboards/kiali/”和“/dashboards/kiali”(按此顺序),然​​后重写为“/”。另外,当您尝试访问这些服务时,您能否发布来自 kiali/grafana istio-proxy 的日志?
  • 另外请检查这个:grafana.com/tutorials/run-grafana-behind-a-proxy 很确定 kiali 会有类似的东西
  • grafana redirects me to www.foobar.com/login 应用程序就是这样配置的,我已经解释过了here。我认为 kiali 和 prometheus 是一样的。所以你的 istio 配置是正确的,但是如果想在同一主机上拥有 /dashboards/kiali 和其他人,那么你必须为此配置你的应用程序。
  • 感谢@LudovicC,我意识到像这些家伙这样的应用程序需要额外的配置。我现在已经让 Prometheus 和 Grafana 工作了,等我让它们都工作后我会回答我的问题。
  • 还要感谢@Jakub,我正在努力更改应用程序的配置。

标签: kubernetes grafana istio istio-kiali


【解决方案1】:

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

我已经解决了:

首先,VirtualServe 是正确的,但记得在写部分时加上引号:

    rewrite:
      uri: "/"

前缀部分需要用/关闭

  - name: kubernetes-dashboard
    match:
    - uri:
        prefix: "/kubernetes/"

诀窍来了,prometheus 和 grafana 被设计为在根 url 上工作。但是,它可以在deployment.yaml 中配置 例如,我希望我的 grafana 和 prometheus 分别在 www.foobar.com/grafana/www.foobar.com/prometheus 工作。 在grafanadeployment.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'

而在prometheus中,也有类似的:

- 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/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2020-08-17
    • 2019-12-10
    相关资源
    最近更新 更多