TCPサービスのメトリクス収集
このタスクでは、メッシュ内のTCPサービスのテレメトリをIstioで自動的に収集する方法を示します。このタスクの最後には、メッシュのデフォルトのTCPメトリクスをクエリできます。
このタスク全体を通して、Bookinfoサンプルアプリケーションが例として使用されます。
始める前に
クラスタにIstioをインストールし、アプリケーションをデプロイします。Prometheusもインストールする必要があります。
このタスクでは、Bookinfoサンプルが
default
名前空間にデプロイされていることを前提としています。異なる名前空間を使用する場合は、サンプル構成とコマンドを更新してください。
新しいテレメトリデータの収集
MongoDBを使用するようにBookinfoを設定します。
ratings
サービスのv2
をインストールします。$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@ serviceaccount/bookinfo-ratings-v2 created deployment.apps/ratings-v2 created
mongodb
サービスをインストールします。$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@ service/mongodb created deployment.apps/mongodb-v1 created
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
仮想サービスにこれらのサブセットを参照させる前に、宛先ルールが伝播するまで数秒待ちます。これは、仮想サービス内のサブセット参照が宛先ルールに依存するためです。
ratings
とreviews
の仮想サービスを作成します。$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@ virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created
サンプルアプリケーションにトラフィックを送信します。
Bookinfoサンプルの場合、Webブラウザで
http://$GATEWAY_URL/productpage
にアクセスするか、次のコマンドを使用します。$ curl http://"$GATEWAY_URL/productpage"
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を次のように拡張します。
- TCPクライアントは、最初のバイトシーケンスとして、マジックバイト文字列と長さプレフィックス付きのペイロードを送信します。
- TCPサーバーは、最初のバイトシーケンスとして、マジックバイトシーケンスと長さプレフィックス付きのペイロードを送信します。これらのペイロードは、protobufでエンコードされたシリアル化されたメタデータです。
- クライアントとサーバーは同時に、そして順序外れに書き込むことができます。Envoyの拡張フィルタは、マジックバイトシーケンスが一致しないか、ペイロード全体が読み取られるまで、ダウンストリームとアップストリームでさらに処理を行います。
クリーンアップ
port-forward
プロセスを削除します。$ killall istioctl
後続のタスクを検討しない場合は、Bookinfoクリーンアップ手順を参照してアプリケーションをシャットダウンしてください。