Prometheus を使用したマルチクラスター Istio の監視

概要

このガイドは、2 つ以上の個別の Kubernetes クラスターで構成される Istio メッシュの監視を設定する方法について、運用ガイダンスを提供することを目的としています。これは、マルチクラスター テレメトリと Prometheus に対する*唯一*の可能な方法を確立することを意図したものではなく、Prometheus を使用したマルチクラスター テレメトリへの実用的なアプローチを示すためのものです。

Prometheus を使用した Istio のマルチクラスター監視に関する推奨事項は、Prometheus の階層型フェデレーションの基盤に基づいています。Istio によって各クラスターにローカルにデプロイされた Prometheus インスタンスは、初期コレクターとして機能し、本番環境のメッシュ全体の Prometheus インスタンスにフェデレートされます。そのメッシュ全体の Prometheus は、メッシュの外部(外部)に存在することも、メッシュ内のクラスターの 1 つに存在することもできます。

マルチクラスター Istio のセットアップ

サポートされている マルチクラスタデプロイメントモデル のいずれかで Istio クラスタをセットアップするには、マルチクラスタインストール セクションに従ってください。このガイドの目的では、以下の注意事項を踏まえれば、どのアプローチでも機能します。

各クラスタにクラスタローカルの Istio Prometheus インスタンスがインストールされていることを確認してください。

クラスタごとに個別の Istio デプロイメントで Prometheus を実行することで、外部またはいずれかのクラスタで実行される本番環境対応の Prometheus インスタンスへのフェデレーションによるクラスタ間のモニタリングの基盤を形成するために必要です。

各クラスタで Prometheus のインスタンスが実行されていることを確認してください。

$ 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

Prometheus フェデレーションの設定

外部本番 Prometheus

Istio デプロイメントの外部で Prometheus インスタンスを実行したい理由はいくつかあります。モニタリング対象のクラスタとは別に長期モニタリングを行いたい場合や、複数の個別のメッシュを1か所でモニタリングしたい場合など、さまざまな動機が考えられます。いずれの場合でも、すべてを機能させるには特別な構成が必要になります。

Architecture of external Production Prometheus for monitoring multicluster Istio.
マルチクラスタ Istio をモニタリングするための外部本番環境 Prometheus

Istio は、ゲートウェイ を介してクラスタサービスを外部に公開する方法を提供します。クラスタローカルの Prometheus のイングレスゲートウェイを構成することで、クラスタ内の Prometheus エンドポイントへの外部接続を提供できます。

各クラスタについて、テレメトリアドオンへのリモートアクセス タスクの適切な手順に従ってください。また、安全な (HTTPS) アクセスを確立**する必要があります**。

次に、以下のような構成を使用して、外部 Prometheus インスタンスがクラスタローカルの Prometheus インスタンスにアクセスするように構成します (イングレスドメインとクラスタ名を置き換えます)。

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}}'

注意事項

  • CLUSTER_NAME は、クラスタの作成に使用した値 (values.global.multiCluster.clusterName で設定) と同じ値に設定する必要があります。

  • Prometheus エンドポイントへの認証は提供されません。これは、誰でもクラスタローカルの Prometheus インスタンスにクエリできることを意味します。これは望ましくない場合があります。

  • ゲートウェイの適切な HTTPS 構成がない場合、すべてがプレーンテキストで転送されます。これは望ましくない場合があります。

メッシュ内クラスターの本番 Prometheus

いずれかのクラスタで本番環境 Prometheus を実行する場合は、そこからメッシュ内の他のクラスタローカル Prometheus インスタンスへの接続を確立する必要があります。

これは、外部フェデレーションの構成のバリエーションにすぎません。この場合、本番環境 Prometheus を実行しているクラスタの構成は、リモートクラスタ Prometheus スクレイピングの構成とは異なります。

Architecture of in-mesh Production Prometheus for monitoring multicluster Istio.
マルチクラスタ Istio をモニタリングするためのメッシュ内本番環境 Prometheus

本番環境 Prometheus が *ローカル* と *リモート* の両方の Prometheus インスタンスにアクセスするように構成します。

最初に次のコマンドを実行します。

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

次に、*リモート* クラスタの構成を追加し (各クラスタのイングレスドメインとクラスタ名を置き換えます)、*ローカル* クラスタの構成を1つ追加します。

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(.*)"}'
この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!