TCPサービスのメトリクス収集

このタスクでは、メッシュ内のTCPサービスのテレメトリをIstioで自動的に収集する方法を示します。このタスクの最後には、メッシュのデフォルトのTCPメトリクスをクエリできます。

このタスク全体を通して、Bookinfoサンプルアプリケーションが例として使用されます。

始める前に

  • クラスタにIstioをインストールし、アプリケーションをデプロイします。Prometheusもインストールする必要があります。

  • このタスクでは、Bookinfoサンプルがdefault名前空間にデプロイされていることを前提としています。異なる名前空間を使用する場合は、サンプル構成とコマンドを更新してください。

新しいテレメトリデータの収集

  1. MongoDBを使用するようにBookinfoを設定します。

    1. ratingsサービスのv2をインストールします。

      圧縮
      $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@
      serviceaccount/bookinfo-ratings-v2 created
      deployment.apps/ratings-v2 created
      
    2. mongodbサービスをインストールします。

      圧縮
      $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@
      service/mongodb created
      deployment.apps/mongodb-v1 created
      
    3. Bookinfoサンプルは、各マイクロサービスの複数のバージョンをデプロイするため、まず、各バージョンに対応するサービスサブセットと、各サブセットのロードバランシングポリシーを定義する宛先ルールを作成します。

      圧縮
      $ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
      

      相互TLSを有効にした場合は、代わりに次のコマンドを実行します。

      圧縮
      $ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
      

      宛先ルールを表示するには、次のコマンドを実行します。

      $ kubectl get destinationrules -o yaml
      

      仮想サービスにこれらのサブセットを参照させる前に、宛先ルールが伝播するまで数秒待ちます。これは、仮想サービス内のサブセット参照が宛先ルールに依存するためです。

    4. ratingsreviewsの仮想サービスを作成します。

      圧縮
      $ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@
      virtualservice.networking.istio.io/reviews created
      virtualservice.networking.istio.io/ratings created
      
  2. サンプルアプリケーションにトラフィックを送信します。

    Bookinfoサンプルの場合、Webブラウザでhttp://$GATEWAY_URL/productpageにアクセスするか、次のコマンドを使用します。

    $ curl http://"$GATEWAY_URL/productpage"
    
  3. TCPメトリック値が生成および収集されていることを確認します。

    Kubernetes環境では、次のコマンドを使用してPrometheusのポート転送を設定します。

    $ istioctl dashboard prometheus
    

    PrometheusのブラウザウィンドウでTCPメトリックの値を表示します。「グラフ」を選択します。istio_tcp_connections_opened_totalメトリックまたはistio_tcp_connections_closed_totalを入力し、「実行」を選択します。「コンソール」タブに表示されるテーブルには、次のようなエントリが含まれます。

    istio_tcp_connections_opened_total{
    destination_version="v1",
    instance="172.17.0.18:42422",
    job="istio-mesh",
    canonical_service_name="ratings-v2",
    canonical_service_revision="v2"}
    
    istio_tcp_connections_closed_total{
    destination_version="v1",
    instance="172.17.0.18:42422",
    job="istio-mesh",
    canonical_service_name="ratings-v2",
    canonical_service_revision="v2"}
    

TCPテレメトリ収集の理解

このタスクでは、Istio構成を使用して、メッシュ内のTCPサービスへのすべてのトラフィックのメトリックを自動的に生成およびレポートしました。すべてのアクティブな接続のTCPメトリックは、デフォルトで15秒ごとに記録され、このタイマーはtcpReportingDurationで構成可能です。接続のメトリックは、接続の終了時にも記録されます。

TCP属性

いくつかのTCP固有の属性により、Istio内でのTCPポリシーと制御が可能になります。これらの属性はEnvoyプロキシによって生成され、Envoyのノードメタデータを使用してIstioから取得されます。Envoyは、ALPNベースのトンネリングとプレフィックスベースのプロトコルを使用して、ノードメタデータをピアEnvoyに転送します。メッシュ内のクライアントとサーバーのサイドカーによってアドバタイズされ、優先順位付けされる新しいプロトコルistio-peer-exchangeを定義します。ALPNネゴシエーションは、Istio対応プロキシ間の接続ではプロトコルをistio-peer-exchangeに解決しますが、Istio対応プロキシと他のプロキシ間の接続では解決しません。このプロトコルは、TCPを次のように拡張します。

  1. TCPクライアントは、最初のバイトシーケンスとして、マジックバイト文字列と長さプレフィックス付きのペイロードを送信します。
  2. TCPサーバーは、最初のバイトシーケンスとして、マジックバイトシーケンスと長さプレフィックス付きのペイロードを送信します。これらのペイロードは、protobufでエンコードされたシリアル化されたメタデータです。
  3. クライアントとサーバーは同時に、そして順序外れに書き込むことができます。Envoyの拡張フィルタは、マジックバイトシーケンスが一致しないか、ペイロード全体が読み取られるまで、ダウンストリームとアップストリームでさらに処理を行います。
Attribute Generation Flow for TCP Services in an Istio Mesh.
TCP属性フロー

クリーンアップ

  • port-forwardプロセスを削除します。

    $ killall istioctl
    
  • 後続のタスクを検討しない場合は、Bookinfoクリーンアップ手順を参照してアプリケーションをシャットダウンしてください。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!