使用 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版本有问题