问题描述
我们正在使用普罗米修斯运算符,我们需要使用istio公开(外部)Grafana,https://github.com/helm/charts/tree/master/stable/prometheus-operator正常情况下,当我有需要用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---
并添加虚拟服务
Viralservice.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
然后我能够公开访问我的应用程序。
现在我想从普罗米修斯运算表中为Grafana执行同样的操作
在values.yaml
中有服务条目
https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml#L576但是,不确定它是否应该取代service.yaml
,如果是,如何将app: myapp
这样的数据(在常规应用程序中我从部署.yaml的`name‘字段中获取)填充为服务引用Grafana应用程序的Grafana
此外,virutalservice.yaml
中还引用了service
(host:Po-svc)
顺便说一句,如果我像下面这样将values from the chart更改为LoadBalancer
,我会获取一个公共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中的服务配置上遗漏了一些东西,但不确定是什么...
我发现这篇帖子有类似的错误:(但不确定我们有相同的问题)
https://github.com/istio/istio/issues/19966
但是,我不确定应该如何将名称端口添加到chart yaml服务定义
推荐答案
1.7.0版的istio有一个工作示例
istioctl version
client version: 1.7.0
control plane version: 1.7.0
data plane version: 1.7.0 (1 proxies)
1.我已使用helm fetch获取普罗米修斯运算符。
helm fetch stable/prometheus-operator --untar
2.我在values.yaml中更改了这些设置。
GrafanaService。
service:
portName: http-service
port: 3000
targetPort: 3000
Grafanahost。
hosts:
- grafana.domain.com
3.我已创建PO命名空间并安装了普罗米修斯操作符
kubectl create namespace po
helm install prometheus-operator ./prometheus-operator -n po
4.我已使用
检查了grafana服务名称kubectl get svc -n po
prometheus-operator-grafana ClusterIP
5.我对istio使用了以下yamls,并使用prometheus-operator-grafana
的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.使用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版本有问题。
这篇关于使用istio公开揭露Grafana的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!