使用 istio 公开 grafana
Expose grafana publicly using istio
我们正在使用 Prometheus 运算符,我们需要使用 istio publicly(外部)公开 Grafana,
https://github.com/helm/charts/tree/master/stable/prometheus-operator
通常,当我有应用程序需要公开 publicly 与 istio 时,我会在我的微服务中添加类似以下内容的内容 它可以工作 并公开到外部。
service.yaml
apiVersion: v1
kind: Service
metadata:
name: po-svc
namespace: po
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: myapp //I take the name from deployment.yaml --in the chart NOT SURE WHICH VALUE I SHOULD TAKE FROM THE CHART---
并添加虚拟服务
虚拟service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: po-virtualservice
namespace: po
spec:
gateways:
- gw-system.svc.cluster.local
hosts:
- po.eu.trial.appos.cloud.mvn
http:
- route:
- destination:
host: po-svc
port:
number: 3000
然后我可以访问我的应用程序 publicly.
现在我想对普罗米修斯运算符图表中的 Grafana 进行同样的操作
在values.yaml
里面有服务入口
https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml#L576
但是不确定它是否应该替换 service.yaml
,如果是,如何填充像 app: myapp
这样的数据(在常规应用程序中,我从 deployment.yaml 的“名称”字段中获取)是grafana 该服务引用了 Grafana 应用程序
此外,在 virutalservice.yaml
中有对 service
(主机:po-svc)
的引用
My question is: How should I fill those two values and be able to
expose Grafana using istio ?
顺便说一句,如果我将 values from the chart 更改为 LoadBalancer
如下所示,我将获得一个 public url 来访问外部,但是我想通过 istio 公开它.
service:
portName: service
type: LoadBalancer
更新
我创建了以下虚拟服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: po-virtualservice
namespace: po
spec:
gateways:
- gw-system.svc.cluster.local
hosts:
- po.eu.trial.appos.cloud.mvn
http:
- route:
- destination:
host: po-grafana. // This is the name of the service that promethues operator created when applying the chart .
port:
number: 3000
并像下面那样更新 values.yaml
service:
portName: service
port: 3000
targetPort: 3000
现在,当我点击应用程序的浏览器时 url (po.eu.trial.appos.cloud.mvn) 我得到了错误
upstream connect error or disconnect/reset before headers. reset reason: connection termination
知道可能是什么问题吗?我应该如何追踪这个问题?
我想(不确定 100%)我可能在 chart 中的 服务配置中遗漏了一些东西,但不确定是什么...
我发现这个 post 有类似的错误:(但不确定我们有同样的问题)
https://github.com/istio/istio/issues/19966
但是不确定我应该如何将名称端口添加到 chart yaml 服务定义
有一个 istio 版本 1.7.0 的工作示例
istioctl version
client version: 1.7.0
control plane version: 1.7.0
data plane version: 1.7.0 (1 proxies)
1.I 已使用 helm fetch 获取 prometheus 运算符。
helm fetch stable/prometheus-operator --untar
2.I 在 values.yaml 中更改了这些。
Grafana Service.
service:
portName: http-service
port: 3000
targetPort: 3000
Grafana host.
hosts:
- grafana.domain.com
3.I 已创建 po 命名空间并安装了 prometheus operator
kubectl create namespace po
helm install prometheus-operator ./prometheus-operator -n po
4.I已经用
检查了grafana服务名
kubectl get svc -n po
prometheus-operator-grafana ClusterIP
5.I 已将以下 yamls 用于 istio,使用 grafana 服务名称 prometheus-operator-grafana
作为我的虚拟服务和目标规则主机。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: grafana-gateway
namespace: po
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http-grafana
protocol: HTTP
hosts:
- "grafana.domain.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: grafana-vs
namespace: po
spec:
hosts:
- "grafana.domain.com"
gateways:
- grafana-gateway
http:
- route:
- destination:
host: prometheus-operator-grafana.po.svc.cluster.local
port:
number: 3000
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: grafana
namespace: po
spec:
host: prometheus-operator-grafana.po.svc.cluster.local
trafficPolicy:
tls:
mode: DISABLE
5.Test 使用 curl,它是 302 而不是我们必须登录的 200。
curl -v -H "host: grafana.domain.com" xx.xx.xxx.xxx/
GET / HTTP/1.1
> Host: grafana.domain.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 302 Found
让我知道它是否有效,或者如果您有任何其他问题。可能是你用的1.4.3版本有问题
我们正在使用 Prometheus 运算符,我们需要使用 istio publicly(外部)公开 Grafana, https://github.com/helm/charts/tree/master/stable/prometheus-operator
通常,当我有应用程序需要公开 publicly 与 istio 时,我会在我的微服务中添加类似以下内容的内容 它可以工作 并公开到外部。
service.yaml
apiVersion: v1
kind: Service
metadata:
name: po-svc
namespace: po
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: myapp //I take the name from deployment.yaml --in the chart NOT SURE WHICH VALUE I SHOULD TAKE FROM THE CHART---
并添加虚拟服务
虚拟service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: po-virtualservice
namespace: po
spec:
gateways:
- gw-system.svc.cluster.local
hosts:
- po.eu.trial.appos.cloud.mvn
http:
- route:
- destination:
host: po-svc
port:
number: 3000
然后我可以访问我的应用程序 publicly.
现在我想对普罗米修斯运算符图表中的 Grafana 进行同样的操作
在values.yaml
里面有服务入口
https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml#L576
但是不确定它是否应该替换 service.yaml
,如果是,如何填充像 app: myapp
这样的数据(在常规应用程序中,我从 deployment.yaml 的“名称”字段中获取)是grafana 该服务引用了 Grafana 应用程序
此外,在 virutalservice.yaml
中有对 service
(主机:po-svc)
My question is: How should I fill those two values and be able to expose Grafana using istio ?
顺便说一句,如果我将 values from the chart 更改为 LoadBalancer
如下所示,我将获得一个 public url 来访问外部,但是我想通过 istio 公开它.
service:
portName: service
type: LoadBalancer
更新
我创建了以下虚拟服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: po-virtualservice
namespace: po
spec:
gateways:
- gw-system.svc.cluster.local
hosts:
- po.eu.trial.appos.cloud.mvn
http:
- route:
- destination:
host: po-grafana. // This is the name of the service that promethues operator created when applying the chart .
port:
number: 3000
并像下面那样更新 values.yaml
service:
portName: service
port: 3000
targetPort: 3000
现在,当我点击应用程序的浏览器时 url (po.eu.trial.appos.cloud.mvn) 我得到了错误
upstream connect error or disconnect/reset before headers. reset reason: connection termination
知道可能是什么问题吗?我应该如何追踪这个问题?
我想(不确定 100%)我可能在 chart 中的 服务配置中遗漏了一些东西,但不确定是什么...
我发现这个 post 有类似的错误:(但不确定我们有同样的问题)
https://github.com/istio/istio/issues/19966
但是不确定我应该如何将名称端口添加到 chart yaml 服务定义
有一个 istio 版本 1.7.0 的工作示例
istioctl version
client version: 1.7.0
control plane version: 1.7.0
data plane version: 1.7.0 (1 proxies)
1.I 已使用 helm fetch 获取 prometheus 运算符。
helm fetch stable/prometheus-operator --untar
2.I 在 values.yaml 中更改了这些。
Grafana Service.
service:
portName: http-service
port: 3000
targetPort: 3000
Grafana host.
hosts:
- grafana.domain.com
3.I 已创建 po 命名空间并安装了 prometheus operator
kubectl create namespace po
helm install prometheus-operator ./prometheus-operator -n po
4.I已经用
检查了grafana服务名kubectl get svc -n po
prometheus-operator-grafana ClusterIP
5.I 已将以下 yamls 用于 istio,使用 grafana 服务名称 prometheus-operator-grafana
作为我的虚拟服务和目标规则主机。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: grafana-gateway
namespace: po
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http-grafana
protocol: HTTP
hosts:
- "grafana.domain.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: grafana-vs
namespace: po
spec:
hosts:
- "grafana.domain.com"
gateways:
- grafana-gateway
http:
- route:
- destination:
host: prometheus-operator-grafana.po.svc.cluster.local
port:
number: 3000
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: grafana
namespace: po
spec:
host: prometheus-operator-grafana.po.svc.cluster.local
trafficPolicy:
tls:
mode: DISABLE
5.Test 使用 curl,它是 302 而不是我们必须登录的 200。
curl -v -H "host: grafana.domain.com" xx.xx.xxx.xxx/
GET / HTTP/1.1
> Host: grafana.domain.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 302 Found
让我知道它是否有效,或者如果您有任何其他问题。可能是你用的1.4.3版本有问题