如何使用virtualservice暴露grafana prometheus、kiali等dashboard?
How to use virtualservice to expose dashboards like grafana prometheus and kiali?
我的仪表板暴露给 <dashboard>.foobar.com
没问题,现在我正尝试将上面提到的仪表板暴露给 www.foobar.com/dashboard/<kiali>
我已经使用一个简单的 .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
正如有人提到的,/
和
存在一个已知问题,因此您可以看到我对它们都有 rewrite
。但仍然没有任何效果。
他们中的大多数我都得到了 404,grafana 将我重定向到 www.foobar.com/login
有人做过吗?我在想也许这些仪表板是前端包含的,所以它不像我的 .net 后端容器那么简单?
有同样问题的朋友请看这里:
我已经解决了这个问题:
所以首先,VirtualSerive 是正确的,但记得添加引号来写部分:
rewrite:
uri: "/"
并且前缀部分需要用 /
结束
- name: kubernetes-dashboard
match:
- uri:
prefix: "/kubernetes/"
技巧来了,prometheus 和 grafana 被设计为在 root 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'
而在普罗米修斯中,它有类似的:
- 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/"
我的仪表板暴露给 <dashboard>.foobar.com
没问题,现在我正尝试将上面提到的仪表板暴露给 www.foobar.com/dashboard/<kiali>
我已经使用一个简单的 .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
正如有人提到的,/
和
存在一个已知问题,因此您可以看到我对它们都有 rewrite
。但仍然没有任何效果。
他们中的大多数我都得到了 404,grafana 将我重定向到 www.foobar.com/login
有人做过吗?我在想也许这些仪表板是前端包含的,所以它不像我的 .net 后端容器那么简单?
有同样问题的朋友请看这里:
我已经解决了这个问题:
所以首先,VirtualSerive 是正确的,但记得添加引号来写部分:
rewrite:
uri: "/"
并且前缀部分需要用 /
- name: kubernetes-dashboard
match:
- uri:
prefix: "/kubernetes/"
技巧来了,prometheus 和 grafana 被设计为在 root 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'
而在普罗米修斯中,它有类似的:
- 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/"