3.2. Service Mesh について
こちらは、サポートされなくなった Red Hat OpenShift Service Mesh リリースのドキュメントです。
Service Mesh バージョン 1.0 および 1.1 コントロールプレーンはサポートされなくなりました。Service Mesh コントロールプレーンのアップグレードの詳細は、Service Mesh の アップグレード を参照してください。
特定の Red Hat OpenShift Service Mesh リリースのサポートステータスは、製品ライフサイクルページ を参照してください。
Red Hat OpenShift Service Mesh は、サービスメッシュにおいてネットワーク化されたマイクロサービス全体の動作に関する洞察と運用管理のためのプラットフォームを提供します。Red Hat OpenShift Service Mesh では、OpenShift Container Platform 環境でマイクロサービスの接続、保護、監視を行うことができます。
3.2.1. Red Hat OpenShift Service Mesh とは リンクのコピーリンクがクリップボードにコピーされました!
Service Mesh は、分散したマイクロサービスアーキテクチャーの複数のアプリケーションを設定するマイクロサービスのネットワークであり、マイクロサービス間の対話を可能にします。Service Mesh のサイズとおよび複雑性が増大すると、これを把握し、管理することがより困難になる可能性があります。
オープンソースの Istio プロジェクトをベースとする Red Hat OpenShift Service Mesh は、サービスコードに変更を加えずに、既存の分散したアプリケーションに透過的な層を追加します。Red Hat OpenShift Service Mesh サポートをサービスに追加するには、マイクロサービス間のすべてのネットワーク通信を傍受する特別なサイドカープロキシーをメッシュ内の関連サービスにデプロイします。Service Mesh コントロールプレーンの機能を使用して Service Mesh を設定し、管理します。
Red Hat OpenShift Service Mesh により、以下を提供するデプロイされたサービスのネットワークを簡単に作成できます。
- 検出
- 負荷分散
- サービス間の認証
- 障害回復
- メトリクス
- モニタリング
Red Hat OpenShift Service Mesh は、以下を含むより複雑な運用機能も提供します。
- A/B テスト
- カナリアリリース
- アクセス制御
- エンドツーエンド認証
3.2.2. Red Hat OpenShift Service Mesh アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service Mesh は、データプレーンとコントロールプレーンに論理的に分割されます。
データプレーン は、サイドカーコンテナーとしてデプロイされたインテリジェントプロキシーのセットです。これらのプロキシーは、Service Mesh 内のマイクロサービス間で起こる受信および送信ネットワーク通信をすべて傍受し、制御します。Sidecar プロキシーは、Mixer、汎用ポリシーおよび Telemetry ハブとも通信します。
- Envoy プロキシー は、Service Mesh 内の全サービスの受信トラフィックおよび送信トラフィックをすべてインターセプトします。Envoy は、同じ Pod の関連するサービスに対してサイドカーコンテナーとしてデプロイされます。
コントロールプレーン は、プロキシーがトラフィックをルーティングするように管理および設定し、Mixer がポリシーを適用し、Telemetry を収集するように設定します。
- Mixer は、アクセス制御と使用ポリシー (認可、レート制限、クォータ、認証、および要求トレースなど) を適用し、Envoy プロキシーやその他のサービスから Telemetry データを収集します。
- Pilot はランタイム時にプロキシーを設定します。Pilot は、Envoy サイドカーコンテナーのサービス検出、インテリジェントルーティング (例: A/B テストまたはカナリアデプロイメント) のトラフィック管理機能、および回復性 (タイムアウト、再試行、サーキットブレーカー) を提供します。
- Citadel は証明書を発行し、ローテーションします。Citadel は、組み込み型のアイデンティティーおよび認証情報の管理機能を使用して、強力なサービス間認証およびエンドユーザー認証を提供します。Citadel を使用して、Service Mesh で暗号化されていないトラフィックをアップグレードできます。Operator は、Citadel を使用して、ネットワーク制御ではなく、サービスアイデンティティーに基づいてポリシーを適用できます。
- Galley は、サービスメッシュ設定を取り込み、その後設定を検証し、処理し、配布します。Galley は、他のサービスメッシュコンポーネントが OpenShift Container Platform からユーザー設定の詳細を取得できないようにします。
Red Hat OpenShift Service Mesh は、istio-operator を使用してコントロールプレーンのインストールも管理します。Operator は、OpenShift Container Platform クラスターで共通アクティビティーを実装し、自動化できるようにするソフトウェアの一部です。これはコントローラーとして動作し、クラスター内の必要なオブジェクトの状態を設定したり、変更したりできます。
3.2.3. Kiali について リンクのコピーリンクがクリップボードにコピーされました!
Kiali は、Service Mesh のマイクロサービスとそれらの接続方法を表示して Service Mesh を可視化します。
3.2.3.1. Kiali の概要 リンクのコピーリンクがクリップボードにコピーされました!
Kiali では、OpenShift Container Platform で実行される Service Mesh の可観測性 (Observability) を提供します。Kiali は、Istio サービスメッシュの定義、検証、および確認に役立ちます。トポロジーを推測することで Service Mesh の構造を理解するのに役立ち、Service Mesh の正常性に関する情報も提供します。
Kiali は、サーキットブレーカー、要求レート、レイテンシー、トラフィックフローのグラフなどの機能を可視化する、namespace のインタラクティブなグラフビューをリアルタイムで提供します。Kiali では、異なるレベルのコンポーネント (アプリケーションからサービスおよびワークロードまで) に関する洞察を提供し、選択されたグラフノードまたはエッジに関するコンテキスト情報やチャートを含む対話を表示できます。Kiali は、ゲートウェイ、宛先ルール、仮想サービス、メッシュポリシーなど、Istio 設定を検証する機能も提供します。Kiali は詳細なメトリクスを提供し、基本的な Grafana 統合は高度なクエリーに利用できます。Jaeger を Kiali コンソールに統合することで、分散トレースを提供します。
Kiali は、デフォルトで Red Hat OpenShift Service Mesh の一部としてインストールされます。
3.2.3.2. Kiali アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Kiali はオープンソースの Kiali プロジェクト に基づいています。Kiali は Kiali アプリケーションと Kiali コンソールという 2 つのコンポーネントで構成されます。
- Kiali アプリケーション (バックエンド): このコンポーネントはコンテナーアプリケーションプラットフォームで実行され、Service Mesh コンポーネントと通信し、データを取得し、処理し、そのデータをコンソールに公開します。Kiali アプリケーションはストレージを必要としません。アプリケーションをクラスターにデプロイする場合、設定は ConfigMap およびシークレットに設定されます。
- Kiali コンソール (フロントエンド): Kiali コンソールは Web アプリケーションです。Kiali アプリケーションは Kiali コンソールを提供し、データをユーザーに表示するためにバックエンドに対してデータのクエリーを実行します。
さらに Kiali は、コンテナーアプリケーションプラットフォームと Istio が提供する外部サービスとコンポーネントに依存します。
- Red Hat Service Mesh (Istio): Istio は Kiali の要件です。Istio は Service Mesh を提供し、制御するコンポーネントです。Kiali と Istio を個別にインストールすることはできますが、Kiali は Istio に依存し、Istio が存在しない場合は機能しません。Kiali は、Prometheus およびクラスター API 経由で公開される Istio データおよび設定を取得する必要があります。
- Prometheus: 専用の Prometheus インスタンスは Red Hat OpenShift Service Mesh インストールの一部として組み込まれています。Istio Telemetry が有効になっている場合、メトリクスデータは Prometheus に保存されます。Kiali はこの Prometheus データを使用して、メッシュトポロジーの判別、メトリクスの表示、健全性の算出、可能性のある問題の表示などを行います。Kiali は Prometheus と直接通信し、Istio Telemetry で使用されるデータスキーマを想定します。Prometheus は Istio に依存しており、Kiali と明示的な依存関係があるため、Kiali の機能の多くは Prometheus なしに機能しません。
- Cluster API: Kiali はサービスメッシュ設定を取得し、解決するために、OpenShift Container Platform (Cluster API) の API を使用します。Kiali はクラスター API に対してクエリーを実行し、たとえば、namespace、サービス、デプロイメント、Pod、その他のエンティティーの定義を取得します。Kiali はクエリーを実行して、異なるクラスターエンティティー間の関係も解決します。クラスター API に対してもクエリーを実行し、仮想サービス、宛先ルール、ルートルール、ゲートウェイ、クォータなどの Istio 設定を取得します。
- Jaeger: Jaeger はオプションですが、Red Hat OpenShift Service Mesh インストールの一部としてデフォルトでインストールされます。デフォルトの Red Hat OpenShift Service Mesh インストールの一部として Distributed Tracing Platform (Jaeger) をインストールすると、Kiali コンソールに分散トレーシングデータを表示するタブが追加されます。Istio の分散トレース機能を無効にした場合、トレースデータは利用できないことに注意してください。また、トレースデータを表示するには、ユーザーは Service Mesh コントロールプレーンがインストールされている namespace にアクセスできる必要があります。
- Grafana: Grafana はオプションですが、デフォルトでは Red Hat OpenShift Service Mesh インストールの一部としてインストールされます。使用可能な場合は、Kiali のメトリクスページに Grafana 内の同じメトリクスにユーザーを移動させるリンクが表示されます。Grafana ダッシュボードへのリンクと Grafana データを表示するには、Service Mesh コントロールプレーンがインストールされている namespace にユーザーがアクセスできる必要があることに注意してください。
3.2.3.3. Kiali の機能 リンクのコピーリンクがクリップボードにコピーされました!
Kiali コンソールは Red Hat Service Mesh に統合され、以下の機能を提供します。
- 健全性: アプリケーション、サービス、またはワークロードの問題を素早く特定します。
- トポロジー: Kiali グラフを使用して、アプリケーション、サービス、またはワークロードの通信方法を可視化します。
- メトリクス: 事前定義済みのメトリクスダッシュボードを使用すると、Go、Node.js、Quarkus、Spring Boot、Thorntail、および Vert.xまた、独自のカスタムダッシュボードを作成することもできます。
- トレース: Jaeger との統合により、アプリケーションを設定するさまざまなマイクロサービスで要求のパスを追跡できます。
- 検証: 最も一般的な Istio オブジェクト (宛先ルール、サービスエントリー、仮想サービスなど) で高度な検証を実行します。
- 設定: ウィザードを使用するか、Kiali コンソールの YAML エディターを直接使用して、Istio ルーティング設定を作成し、更新し、削除できるオプションの機能です。
3.2.4. Jaeger について リンクのコピーリンクがクリップボードにコピーされました!
ユーザーがアプリケーションでアクションを実行するたびに、応答を生成するために多数の異なるサービスに参加を要求する可能性のあるアーキテクチャーによって要求が実行されます。この要求のパスは分散トランザクションです。Jaeger を使用すると、分散トレースを実行できます。これは、アプリケーションを設定するさまざまなマイクロサービスを介して要求のパスを追跡します。
分散トレーシング は、さまざまな作業単位 (通常は別々のプロセスまたはホストで実行されるもの) に関する情報を結び付けて、分散トランザクション内の一連のイベント全体を把握するために使用される手法です。分散トレーシングを使用すると、開発者は大規模なサービス指向アーキテクチャー内の呼び出しの流れを視覚化できます。シリアル化、並行処理、およびレイテンシーの原因を理解しておくことも重要です。
Jaeger はマイクロサービスのスタック全体での個々の要求の実行を記録し、トレースとして表示します。トレース とは、システムにおけるデータ/実行パスです。エンドツーエンドトレースは、1 つ以上のスパンで構成されます。
スパン は、オペレーション名、オペレーションの開始時間および期間を持つ、Jaeger の作業の論理単位を表しています。スパンは因果関係をモデル化するためにネスト化され、順序付けられます。
3.2.4.1. 分散トレーシングの概要 リンクのコピーリンクがクリップボードにコピーされました!
サービス所有者は、分散トレーシングを使用してサービスを計装し、サービスアーキテクチャーに関する分析情報を収集できます。Red Hat OpenShift Distributed Tracing Platform を使用すると、最新のクラウドネイティブのマイクロサービスベースのアプリケーションにおけるコンポーネント間の相互作用の監視、ネットワークプロファイリング、トラブルシューティングを行うことができます。
Distributed Tracing Platform を使用すると、次の機能を実行できます。
- 分散トランザクションの監視
- パフォーマンスとレイテンシーの最適化
- 根本原因分析の実行
3.2.4.2. 分散トレーシングのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Distributed Tracing Platform (Jaeger) は、オープンソースの Jaeger プロジェクト に基づいています。Distributed Tracing Platform (Jaeger) は、トレースデータを収集、保存、表示するために連携して動作する複数のコンポーネントで構成されています。
- Jaeger クライアント (Tracer、Reporter、計装されたアプリケーション、クライアントライブラリー) - Jaeger クライアントは、OpenTracing API の言語固有の実装です。これを使用すると、手動で、または OpenTracing にすでに統合されているさまざまな既存のオープンソースフレームワーク (Camel (Fuse)、Spring Boot (RHOAR)、MicroProfile (RHOAR/Thorntail)、Wildfly (EAP) など) を使用して、分散トレーシング用にアプリケーションを計装できます。
- Jaeger Agent (Server Queue、Processor Worker): Jaeger エージェントは、User Datagram Protocol (UDP) で送信されるスパンをリッスンするネットワークデーモンで、コレクターにバッチ処理や送信を実行します。エージェントは、計装されたアプリケーションと同じホストに配置する必要があります。これは通常、Kubernetes などのコンテナー環境にサイドカーコンテナーを配置することによって実行されます。
- Jaeger Collector (Queue、Worker): エージェントと同様に、コレクターはスパンを受信でき、これらを処理するために内部キューに配置できます。これにより、コレクターはスパンがストレージに移動するまで待機せずに、クライアント/エージェントにすぐに戻ることができます。
- Storage (Data Store): コレクターには永続ストレージのバックエンドが必要です。Jaeger には、スパンストレージ用のプラグ可能なメカニズムがあります。このリリースでは、サポートされているストレージは Elasticsearch のみであることに注意してください。
- Query (Query Service): Query は、ストレージからトレースを取得するサービスです。
- Ingester (Ingester Service): Jaeger は Apache Kafka をコレクターと実際のバッキングストレージ (Elasticsearch) 間のバッファーとして使用できます。Ingester は、Kafka からデータを読み取り、別のストレージバックエンド (Elasticsearch) に書き込むサービスです。
- Jaeger Console: Jaeger は、分散トレースデータを視覚化できるユーザーインターフェイスを提供します。検索ページで、トレースを検索し、個別のトレースを設定するスパンの詳細を確認できます。
3.2.4.3. Red Hat OpenShift Distributed Tracing Platform の機能 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Distributed Tracing Platform は、次の機能を提供します。
- Kiali との統合 - 適切に設定すると、Kiali コンソールから Distributed Tracing Platform データを表示できます。
- 高いスケーラビリティー - Distributed Tracing Platform のバックエンドは、単一障害点がなく、ビジネスニーズに合わせて拡張できるように設計されています。
- 分散コンテキスト伝播 - さまざまなコンポーネントのデータを相互に接続して、完全なエンドツーエンドのトレースを作成できます。
- Zipkin との下位互換性 - Red Hat OpenShift Distributed Tracing Platform には、Zipkin のドロップインリプレースメントとして使用できる API があります。ただし、Red Hat はこのリリースでは Zipkin との互換性をサポートしていません。
3.2.5. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform 環境に Red Hat OpenShift Service Mesh をインストールする準備 をします。