我的团队正在我们的k8s(v 1.15.6)环境中使用istio(版本1.2.8),
并且我们希望在应用vs时为Prometheus提供外部IP
我们能够在浏览器中访问Prometheus,但没有and css/js文件。由于没有提供.js文件,因此/static(请参见下面的日志)文件(请参见以下特使日志)出现 404 错误。

这是我们获得的uit_rstrong的用户界面(不提供CSS和JS文件)

而不是以下Prometheus默认用户界面(使用负载平衡器或端口转发时...)

这是查看问题的最少步骤:

通过 Helm 按原样安装Prometheus (最新,我们没有从图表中更改Prometheus的任何默认配置)

service的名称(在服务已部署的kubectl get svc上加上ns)放在VS的destination->host部分中(更新gw主机等)并应用VS文件

vs.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: prom-virtualservice
  namespace: mon
spec:
  gateways:
    - de-system-gateway.ws-system.svc.cluster.local
  hosts:
    - lzs.dev10.int.str.cloud.rpn
  http:
    - match:
        - uri:
            prefix: /prometheus
      rewrite:
        uri: /graph
      route:
        - destination:
            host: prom-prometheus-server
            port:
              number: 80



顺便说一句,

如果我只是更改Prometheus的类型以使用 LoadBalancer 起作用,那么我能够获得external-ip并按预期看到istio UI。

其他信息,如果我删除以下内容
      rewrite:
        uri: /graph

我在浏览器中得到了404 error,但没有来自舞会的任何数据

在没有js / css文件的浏览器中,浏览器中的网络如下所示:

我什至尝试以下方法也不起作用
        - uri:
            prefix: /prometheus
      rewrite:
        uri: /static


要么
        - uri:
            prefix: /prometheus/static


我们的gateway规格如下所示
...
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - lzs.dev10.int.str.cloud.rpn
    port:
      name: https-manager
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      privateKey: /etc/istio/de-tls/tls.key
      serverCertificate: /etc/istio/de-tls/tls.crt

对Prometheus使用端口转发(本地)或loadbalancer可以正常工作。
我们如何使其与istio一起工作?

更新

我也尝试添加静态并得到相同的结果:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: prom-virtualservice
  namespace: mon
spec:
  gateways:
    - de-system-gateway.ws-system.svc.cluster.local
  hosts:
    - lzs.dev10.int.str.cloud.rpn
  http:
    - match:
        - uri:
            prefix: /prometheus
        - uri:
            prefix: /static
        - uri:
            regex: '^.*\.(ico|png|jpg)$'
      rewrite:
        uri: /graph
      route:
        - destination:
            host: prom-prometheus-server
            port:
              number: 80



更新2

使用提供答案的yaml后,现在我看到带有css等的ui,但是它不起作用,我得到了错误:Error loading available metrics!在浏览器 Debug模式的“网络”选项卡中,我可以看到以下内容不起作用

这是错误的特使日志
[2019-12-17T09:04:18.670Z] "GET /api/v1/query?query=time()&_=1576573457737 HTTP/2" 404 NR "-" "-" 0 0 0 - "100.96.0.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "57592874-27f5-4b57-9dea-1bcf13365f60" "lzs.dev10.int.str.cloud.rpn" "-" - - 100.96.2.13:443 100.96.0.1:24664 lzs.dev10.int.str.cloud.rpn
[2019-12-17T09:04:18.670Z] "GET /api/v1/label/__name__/values?_=1576573457738 HTTP/2" 404 NR "-" "-" 0 0 0 - "100.96.0.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "edad441d-58fe-4214-aae0-a0aec9012030" "lzs.dev10.int.str.cloud.rpn" "-" - - 100.96.2.13:443 100.96.0.1:24664 lzs.dev10.int.str.cloud.rpn

kubernetes - istio不为舞会 Helm chart 提供静态文件-LMLPHP

(我们不是在谈论istio附带的Prometheus,我们需要在diff namespace 上安装diff Prometheus ...)

这是特使的日志

2019-12-15T13:57:16.977357Z信息Envoy代理已准备就绪

[2019-12-15 14:29:51.226] [14] [警告] [配置] [bazel-out / k8-opt / bin / external / envoy / source / common / config / _virtual_includes / grpc_stream_lib / common / config / grpc_stream.h:86]已关闭gRPC config流:13
[2019-12-15 15:00:50.980] [14] [警告] [配置] [bazel-out / k8-opt / bin / external / envoy / source / common / config / _virtual_includes / grpc_stream_lib / common / config / grpc_stream.h:86]已关闭gRPC config流:13
[2019-12-15T15:11:02.572Z]“GET / prometheus HTTP / 2” 200-“-”“-” 0 5785 2 1“100.96.3.1” “Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0“” 531e2f39-0c9f-44d3-b11b-e336126ea836“” lzs.dev10.int.str.cloud.rpn“” 100.96.0.16:9090“outbound | 80 || prom -prometheus-server.mon.svc.cluster.local-100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn
[2019-12-15T15:11:02.705Z]“GET /static/vendor/js/jquery-3.3.1.min.js?v=6f92ce56053866194ae5937012c1bec40f1dd1d9 HTTP / 2” 404 NR“-”“-” 0 0 0 -“100.96.3.1”“Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0”“40119d8d-2103-4453-b589-e1561d44d363”“lzs.dev10.int.str .cloud.rpn“”-“--100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn
[2019-12-15T15:11:02.705Z]“GET /static/vendor/js/popper.min.js?v=6f92ce56053866194ae5937012c1bec40f1dd1d9 HTTP / 2” 404 NR“-”“-” 0 0 0-“100.96 .3.1“” Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0“” dbdf2a2a-cfd3-422a-82f4-e6e466407671“” lzs.dev10.int.str.cloud.rpn “”---100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn
[2019-12-15T15:11:02.706Z]“GET /static/vendor/bootstrap-4.3.1/js/bootstrap.min.js?v=6f92ce56053866194ae5937012c1bec40f1dd1d9 HTTP / 2” 404 NR“-”“-” 0 0 0-“100.96.3.1”“Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0”“efd95571-03e9-492d-98ff-b4910d1646d6”“lzs.dev10.int.str .cloud.rpn“”-“--100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn
[2019-12-15T15:11:02.706Z]“GET /static/vendor/bootstrap-4.3.1/css/bootstrap.min.css?v=6f92ce56053866194ae5937012c1bec40f1dd1d9 HTTP / 2” 404 NR“-”“-” 0 0 0-“100.96.3.1”“Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0”“8ae04546-06cb-4ba0-8430-f04388811460”“lzs.dev10.int.str .cloud.rpn“”-“--100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn
[2019-12-15T15:11:02.706Z]“GET /static/css/prometheus.css?v=6f92ce56053866194ae5937012c1bec40f1dd1d9 HTTP / 2” 404 NR“-”“-” 0 0 0-“100.96.3.1”“Mozilla / 5.0(Macintosh; Intel Mac OS X 10.14; rv:70.0)Gecko / 20100101 Firefox / 70.0“” 70c88f5f-b582-4dd9-a2e2-47605c812344“” lzs.dev10.int.str.cloud.rpn“”“--- 100.96.2.10:443 100.96.3.1:32972 lzs.dev10.int.str.cloud.rpn

最佳答案

首先,我发现了有关istio 1.2的一些信息,



因此,如果您使用kubernetes 1.15,我建议将istio升级到最新版本。

关于普罗米修斯,我看到您要使用普罗米修斯 Helm chart ,为什么不使用内置的普罗米修斯呢?如istio documentation中所提供的,prometheus在default,demo和sds版本中启用。

基于istio remotely accessign telemetry addons可以使用secure(https)或insecure(http)选项公开Prometheus。

我个人按照上述教程进行了不安全的复制,并且一切正常。

Kubernetes版本:1.13.11-gke.14

Istio版本:1.4.2

遵循的步骤

1.安装

  • Istioctl
  • Istio default

  • 2.暴露普罗米修斯
    cat <<EOF | kubectl apply -f -
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: prometheus-gateway
      namespace: istio-system
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 15030
          name: http-prom
          protocol: HTTP
        hosts:
        - "*"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: prometheus-vs
      namespace: istio-system
    spec:
      hosts:
      - "*"
      gateways:
      - prometheus-gateway
      http:
      - match:
        - port: 15030
        route:
        - destination:
            host: prometheus
            port:
              number: 9090
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: prometheus
      namespace: istio-system
    spec:
      host: prometheus
      trafficPolicy:
        tls:
          mode: DISABLE
    ---
    EOF
    

    3.结果

    kubernetes - istio不为舞会 Helm chart 提供静态文件-LMLPHP

    编辑

    您可以尝试使用此Yaml吗?
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: prom-virtualservice
      namespace: mon
    spec:
      gateways:
        - de-system-gateway.ws-system.svc.cluster.local
      hosts:
        - lzs.dev10.int.str.cloud.rpn
      http:
      - match:
            - uri:
                prefix: /prometheus
          rewrite:
            uri: /graph
          route:
            - destination:
                host: prom-prometheus-server
                port:
                  number: 80
      - match:
            - uri:
                prefix: /static
            - uri:
                regex: '^.*\.(ico|png|jpg)$'
          route:
            - destination:
                host: prom-prometheus-server
                port:
                  number: 80
    

    EDIT2 请将/ api前缀添加到第二个匹配项中,如下所示
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: prom-virtualservice
      namespace: mon
    spec:
      gateways:
        - de-system-gateway.ws-system.svc.cluster.local
      hosts:
        - lzs.dev10.int.str.cloud.rpn
      http:
      - match:
            - uri:
                prefix: /prometheus
          rewrite:
            uri: /graph
          route:
            - destination:
                host: prom-prometheus-server
                port:
                  number: 80
      - match:
            - uri:
                prefix: /static
            - uri:
                regex: '^.*\.(ico|png|jpg)$'
            - uri:
                prefix: /api
          route:
            - destination:
                host: prom-prometheus-server
                port:
                  number: 80
    

    EDIT3



    我认为这是link的答案,您将/ prometheus重写为/ graph,因为它是主要的Prometheus网址,没关系。但是您无法将/ static,/ api重写为/ graph,因为您需要那些路径来获取文件和指标,如果不匹配,则会出现错误404。

    关于kubernetes - istio不为舞会 Helm chart 提供静态文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59351693/

    10-16 06:37