我的团队正在我们的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
(我们不是在谈论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.安装
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.结果
编辑
您可以尝试使用此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/