Monitoreo de Istio Multicluster con Prometheus

Visión general

Esta guía está destinada a proporcionar orientación operacional sobre cómo configurar el monitoreo demesh de Istio compuestas por dos o más clusters individuales de Kubernetes. No está destinada a establecer el único camino posible hacia adelante, sino más bien para demostrar un enfoque viable al telemetría multicluster con Prometheus.

Nuestra recomendación para el monitoreo multicluster de Istio con Prometheus está construida sobre la base de la federación jerárquica de Prometheus. Las instancias de Prometheus que se despliegan localmente a cada cluster por Istio actúan como recolectores iniciales que luego se federan hasta una instancia de Prometheus de producción de toda la mesh. Ese Prometheus de toda la mesh puede vivir fuera de la mesh (externo), o en uno de los clusters dentro de la mesh.

Configuración de Istio multicluster

Sigue la sección de instalación multicluster para configurar tus clusters de Istio en uno de los modelos de despliegue multicluster soportados. Para el propósito de esta guía, cualquiera de esos enfoques funcionará, con la siguiente advertencia:

Asegúrate de que una instancia local de Prometheus de Istio esté instalada en cada cluster.

El despliegue individual de Prometheus de Istio en cada cluster es requerido para formar la base del monitoreo entre clusters por medio de federación a una instancia lista para producción de Prometheus que se ejecuta externamente o en uno de los clusters.

Valida que tienes una instancia de Prometheus ejecutándose en cada cluster:

$ kubectl -n istio-system get services prometheus
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
prometheus   ClusterIP   10.8.4.109   <none>        9090/TCP   20h

Configurar federación de Prometheus

Prometheus de producción externo

Hay varias razones por las que podrías querer tener una instancia de Prometheus ejecutándose fuera de tu despliegue de Istio. Tal vez quieras monitoreo a largo plazo separado del cluster que está siendo monitoreado. Tal vez quieras monitorear múltiples mallas separadas en un solo lugar. O tal vez tengas otras motivaciones. Cualquiera que sea tu razón, necesitarás algunas configuraciones especiales para hacer que todo funcione.

Arquitectura de Prometheus de Producción externo para monitorear Istio multicluster.
Prometheus de Producción externo para monitorear Istio multicluster

Istio proporciona una manera de exponer servicios de cluster externamente a través de Gateways. Puedes configurar un ingress gateway para el Prometheus local del cluster, proporcionando conectividad externa al endpoint de Prometheus en el cluster.

Para cada cluster, sigue las instrucciones apropiadas de la tarea Acceso Remoto a Addons de Telemetría. También nota que DEBERÍAS establecer acceso seguro (HTTPS).

Después, configura tu instancia externa de Prometheus para acceder a las instancias locales de Prometheus del cluster usando una configuración como la siguiente (reemplazando el dominio de ingress y el nombre del cluster):

scrape_configs:
- job_name: 'federate-{{CLUSTER_NAME}}'
  scrape_interval: 15s

  honor_labels: true
  metrics_path: '/federate'

  params:
    'match[]':
      - '{job="kubernetes-pods"}'

  static_configs:
    - targets:
      - 'prometheus.{{INGRESS_DOMAIN}}'
      labels:
        cluster: '{{CLUSTER_NAME}}'

Notas:

  • CLUSTER_NAME debería establecerse al mismo valor que usaste para crear el cluster (establecido a través de values.global.multiCluster.clusterName).

  • No se proporciona autenticación a los endpoint(s) de Prometheus. Esto significa que cualquiera puede consultar tus instancias locales de Prometheus del cluster. Esto puede no ser deseable.

  • Sin configuración HTTPS apropiada del gateway, todo se está transportando a través de texto plano. Esto puede no ser deseable.

Prometheus de producción en un cluster en malla

Si prefieres ejecutar el Prometheus de producción en uno de los clusters, necesitas establecer conectividad desde él hacia las otras instancias locales de Prometheus del cluster en la mesh.

Esto es realmente solo una variación de la configuración para federación externa. En este caso, la configuración en el cluster que ejecuta el Prometheus de producción es diferente de la configuración para el scraping remoto de Prometheus del cluster.

Arquitectura de Prometheus de Producción en meshpara monitorear Istio multicluster.
Prometheus de Producción en meshpara monitorear Istio multicluster

Configura tu Prometheus de producción para acceder tanto a las instancias locales como remotas de Prometheus.

Primero ejecuta el siguiente comando:

$ kubectl -n istio-system edit cm prometheus -o yaml

Luego agrega configuraciones para los clusters remotos (reemplazando el dominio de ingress y el nombre del cluster para cada cluster) y agrega una configuración para el cluster local:

scrape_configs:
- job_name: 'federate-{{REMOTE_CLUSTER_NAME}}'
  scrape_interval: 15s

  honor_labels: true
  metrics_path: '/federate'

  params:
    'match[]':
      - '{job="kubernetes-pods"}'

  static_configs:
    - targets:
      - 'prometheus.{{REMOTE_INGRESS_DOMAIN}}'
      labels:
        cluster: '{{REMOTE_CLUSTER_NAME}}'

- job_name: 'federate-local'

  honor_labels: true
  metrics_path: '/federate'

  metric_relabel_configs:
  - replacement: '{{CLUSTER_NAME}}'
    target_label: cluster

  kubernetes_sd_configs:
  - role: pod
    namespaces:
      names: ['istio-system']
  params:
    'match[]':
    - '{__name__=~"istio_(.*)"}'
    - '{__name__=~"pilot(.*)"}'
¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!