2.4.2. Service Mesh アーキテクチャー
Service Mesh テクノロジーはネットワーク通信レベルで動作します。つまり、サービスメッシュコンポーネントは、マイクロサービスとの間のトラフィックを取得または傍受して、リクエストを変更したり、リダイレクトしたり、他のサービスへの新しいリクエストを作成したりします。
大まかに言うと、Red Hat OpenShift Service Mesh はデータプレーンとコントロールプレーンで構成されています。
データプレーン は、Pod のアプリケーションコンテナーとともに実行するインテリジェントプロキシーのセットであり、Service Mesh 内のマイクロサービス間で起こる受信および送信ネットワーク通信をすべて傍受し、制御します。データプレーンは、すべての受信 (ingress) および送信 (egress) ネットワークトラフィックを傍受する方法で実装されます。Istio データプレーンは、Pod 内のアプリケーションコンテナーと並行して実行される Envoy コンテナーで構成されます。Envoy コンテナーはプロキシーとして機能し、すべてのネットワーク通信を Pod に対して制御します。
Envoy プロキシー は、データプレーントラフィックと対話する唯一の Istio コンポーネントです。プロキシー経由でサービスフロー間の受信 (ingress) および送信 (egress) ネットワークトラフィックはすべて、そのプロキシーを介して行われます。また、Envoy プロキシーは、メッシュ内のサービストラフィックに関連するすべてのメトリクスを収集します。Envoy プロキシーはサイドカーとしてデプロイされ、サービスと同じ Pod で実行されます。Envoy プロキシーは、メッシュゲートウェイの実装にも使用されます。
- Sidecar プロキシー は、ワークロードインスタンスのインバウンドおよびアウトバウンド通信を管理します。
ゲートウェイ は、受信または送信 HTTP/TCP 接続を受信するロードバランサーとして動作するプロキシーです。ゲートウェイ設定は、サービスワークロードとともに実行するサイドカー Envoy プロキシーではなく、メッシュのエッジで実行するスタンドアロン Envoy プロキシーに適用されます。ゲートウェイを使用してメッシュの受信トラフィックおよび送信トラフィックを管理することで、メッシュに入るか、メッシュを出るトラフィックを指定できます。
- Ingress-gateway - ingress コントローラーとしても知られる、Ingress ゲートウェイは Service Mesh に入るトラフィックを受信し、制御する専用の Envoy プロキシーです。Ingress ゲートウェイは、モニタリングおよびルーティングルールなどの機能をクラスターに入るトラフィックに適用できるようにします。
- Egress-gateway - egress コントローラーとしても知られる、Egress Gateway は Service Mesh からトラフィックを管理する専用の Envoy プロキシーです。Egress Gateway は、モニタリングおよびルートルールなどの機能をメッシュのトラフィックに適用できるようにします。
コントロールプレーン は、データプレーンを設定するプロキシーを管理し、設定します。これは、設定用の権威ソースで、アクセス制御および使用状況ポリシーを管理し、Service Mesh のプロキシーからメトリクスを収集します。
Istio コントロールプレーンは、以前の複数のコントロールプレーンコンポーネント (Citadel、Galley、Pilot) を単一バイナリーに統合する Istiod で構成されています。Istiod は、サービス検出、設定、および証明書の管理を行います。これは、高レベルのルーティングルールを Envoy 設定に変換し、それらをランタイム時にサイドカーコンテナーに伝播します。
- Istiod は認証局 (CA) として機能し、データプレーンでセキュアな mTLS 通信に対応する証明書を生成します。この場合は、外部 CA を使用することもできます。
- Istiod は、OpenShift クラスターにデプロイされたワークロードにサイドカープロキシーコンテナーを注入します。
Red Hat OpenShift Service Mesh は、istio-operator を使用してコントロールプレーンのインストールを管理します。Operator は、OpenShift クラスターで共通のアクティビティーを実装および自動化することを可能にするソフトウェアです。これはコントローラーとして機能します。ユーザーはこれを使用すると、クラスター内のオブジェクト (この場合は Red Hat OpenShift Service Mesh のインストール) の目的の状態を設定または変更できます。
Red Hat OpenShift Service Mesh には、製品の一部として次の Istio アドオンもバンドルされています。
- Kiali - Kiali は、Red Hat OpenShift Service Mesh の管理コンソールです。ダッシュボード、可観測性、および堅牢な設定、ならびに検証機能を提供します。これは、トラフィックトポロジーを推測して Service Mesh の構造を示し、メッシュの正常性を表示します。Kiali は、詳細なメトリクス、強力な検証、Grafana へのアクセス、Distributed Tracing Platform (Jaeger) との強力な統合を提供します。
- Prometheus - Red Hat OpenShift Service Mesh は、Prometheus を使用してサービスからのテレメトリー情報を保存します。Kiali は、メトリクス、ヘルスステータス、およびメッシュトポロジーを取得するために Prometheus に依存します。
- Jaeger - Red Hat OpenShift Service Mesh は Distributed Tracing Platform (Jaeger) をサポートしています。Jaeger はオープンソースのトレース機能で、複数のサービス間の単一要求に関連付けられたトレースを一元管理し、表示します。Distributed Tracing Platform (Jaeger) を使用すると、マイクロサービスベースの分散システムを監視およびトラブルシューティングできます。
- Elasticsearch: Elasticsearch は、オープンソースの分散型 JSON ベースの検索および解析エンジンです。Distributed Tracing Platform (Jaeger) は、永続ストレージに Elasticsearch を使用します。
- Grafana: Grafana は、Istio データの高度なクエリーおよびメトリクス分析、ならびにダッシュボードを使用してメッシュ管理者を提供します。任意で、Grafana を使用して Service Mesh メトリクスを分析できます。
Red Hat OpenShift Service Mesh では、次の Istio 統合がサポートされています。
- 3scale: Istio では、オプションで Red Hat 3scale API Management ソリューションとの統合が提供されます。2.1 より前のバージョンでは、この統合は 3scale Istio アダプターを使用して実行されました。バージョン 2.1 以降では、3scale の統合は WebAssembly モジュールを介して行われます。
3scale アダプターのインストール方法に関する詳細は、3scale Istio アダプターのドキュメント を参照してください。