サービス メッシュとは?利用可能なオープンソース サービス メッシュとは?
マイクロサービス アーキテクチャで開発する場合、DevOps チームが構成する必要がある個々のコンポーネントが多数あります。マイクロサービスが連携するには、情報共有とデータ転送のために確立された通信チャネルが必要です。
サービス間の通信を管理および監視する 1 つの方法は、サービス メッシュを使用することです。
サービス メッシュとは
サービス メッシュ マイクロサービス アーキテクチャに追加された専用のインフラストラクチャ レイヤーです。その主な役割は、高速で安全なサービス間通信を確保することです。この低遅延ツールは、サービス間通信とデータ共有を管理および監視します。
コントロール プレーンで構成されています 開発者がネットワーク層に特定のルールとポリシーを実装する元になります。コントロール プレーンは、サービスと並行して実行されるサイドカー プロキシのコレクションであるデータ プレーンと直接連携します。これらのプロキシは、サービス間のすべての通信を担当します。さらに、アプリケーション全体のパフォーマンスを監視して貴重な洞察を提供し、潜在的な問題を見つけてダウンタイムを回避するのに役立ちます。

プロキシは、次のような貴重な機能を提供します:
- 動的なサービス ディスカバリ
- 負荷分散
- ヘルスチェック
- 暗号化
- オブザーバビリティ
- サーキットブレーカー
- パーセンテージ ベースのトラフィック分割による段階的なロールアウト
- 認証
- 豊富な指標
- 承認
サービス メッシュ アーキテクチャの台頭
サービス メッシュがどのように機能するかを完全に理解するには、そのようなツールが開発された理由を調べる必要があります。サービス メッシュ アーキテクチャの台頭は、マイクロサービスに関連する多くの問題の解決策として浮上しました。
多くの開発チームが、モノリシック アプリケーションの開発からマイクロサービス アーキテクチャへの切り替えを行いました .これにより、アプリケーションがモノリシックなユニットから、連携して動作する個々のサービスのシステムに分割されました。アプリケーションは、個々の機能を備えた複数の自律型サービスで構成されています。
このようなアプリケーションを開発する際の難しさは、これらのサービスが互いに通信するための最適な方法を構成することです。アプリケーションのパフォーマンスは、最高のユーザー エクスペリエンスを提供するために連携してデータを共有するサービスに依存します。たとえば、ウェブ ストアは ログイン サービスで構成できます。 購入サービスと通信する 在庫データベースからの情報を必要とする など。
マイクロサービスは API を介して通信するため、検出を解決するための最適なソリューションを見つける および ルーティング 重要でした。さらに、開発者はシステム内の通信が安全であることを確認する必要がありました .ファイアウォールが外部からの攻撃からアプリケーションを保護する一方で、マイクロサービス アーキテクチャ内にはフラットでオープンなネットワークがありました。
メッシュ サービス アーキテクチャ以前は、このタスクはロードバランサによって処理されていました .ただし、展開とコストの問題により、特に大規模な場合は実用的なソリューションではありませんでした。サービス メッシュは、上記のすべての問題に対する究極のソリューションとして開発されました。これは、サイドカー プロキシを使用してすべてのサービスを管理する集中型レジストリ (コントロール プレーン) を備えたネットワーク レイヤーを提供しました。ロードバランサーと比較して、構成とスケーリングがはるかに簡単です。開発者は、必要に応じてプロキシをスケールアップおよびスケールダウンし、サービスを変更せずにルーティング ルールを変更できます。
サービス メッシュの利点
サービス メッシュの最も重要な利点は次のとおりです。
- セキュリティの向上 – サービス メッシュをマイクロサービス アーキテクチャに実装すると、全体的なセキュリティが向上します。このネットワーク層は自動承認を導入します 、認証 、暗号化 、ポリシーの施行 . 相互トランスポート層セキュリティ(mTLS)を使用 すべてのサービス間通信が安全であることを保証します。サービスは、接続を確立するために、TLS 証明書で自身を識別します。身元を確認したら、データ共有用の暗号化チャネルを確立します。
- 交通管制と視認性 – サービス メッシュの主な機能の 1 つは、トラフィック制御を提供することです。サービス間のトラフィックだけでなく、East-West トラフィックも管理します。すべての通信は、コントロール プレーンによって管理されるサイドカー プロキシを介して行われます。トラフィックは透過的にルーティングされるため、開発者はすべてのデータ交換をよりよく把握できます。アプリケーションのパフォーマンスをより明確に把握できるため、システム内の潜在的な問題を見つけやすくなります。
- オブザーバビリティ –プラットフォームはすべてのトラフィックを管理するため、トラフィックの動作とユーザーのやり取りに関する貴重な洞察を収集します.このような大量のデータを使用して、ビジネス アナリストはアプリケーションを改善するための戦略を立てることができます。
- ネットワーキングではなくアプリ開発に重点を置いている開発者 – 開発チームがネットワーク層全体をセットアップして管理する代わりに、サービス メッシュをアーキテクチャに実装できます。プラットフォームには初期構成が必要ですが、ネットワーク管理に関連する時間のかかるタスクが自動化されます。これにより、開発者はマイクロサービスに集中できます。サービス メッシュをサービス間のインタラクションの管理に任せることで、時間と費用を節約しながら生産性を向上させることができます。
- 弾力性 – サービス メッシュは、回復力のあるマイクロサービス アプリケーションの作成に役立つ機能を提供します。そのような機能の 1 つがサーキット ブレーカー パターンで、障害とレイテンシ スパイクの検出に役立ちます。さらに、サービス メッシュは、サービスの検出とマイクロサービス ネットワーク全体のトラフィックのルーティングに負荷分散を使用します。回復力を高めるその他の機能には、再試行、タイムアウト、期限などがあります。
- テストと展開のサイクルを短縮 – ポッド間通信にサイドカー プロキシを使用すると、セットアップがはるかに簡単かつ迅速になります。冗長な機能を各サービスにコーディングする代わりに、プロキシを展開してサービスに接続します。これにより、開発とテストのサイクル全体がスピードアップします。
オープンソース サービス メッシュのリスト
利用可能なオープン ソース サービス メッシュが多数あります。 Istio、Linkerd、および Consul が最も広く使用されています。
以下に、各プラットフォームの詳細を示します。
Istio
Istio は、Google、IBM、および Lyft によって設計されたオープン ソース インフラストラクチャです。これは、最も初期のサービス メッシュ プラットフォームの 1 つです。 Istiod を使用しています 、複数のコンポーネントで構成されるコントロール プレーン (Pilot 、シタデル 、ミキサー ) サービス メッシュの操作と構成に使用します。データ プレーンは Envoy で構成されています C++ で開発されたプロキシ . HTTP/TCP 接続はゲートウェイによって管理されます 、Istio のロードバランサー。 仮想サービス および DestinationRules ルーティング ルールとポリシーを定義します。

リンカード
Linkerd は、Cloud Native Computing Foundation (CNCF) プロジェクトによって開発された軽量のオープン ソース サービス メッシュです。追加の構成なしで、任意のプラットフォーム上の Kubernetes クラスターに簡単にインストールできます。小規模なクラスターで作業する場合は、構成がないことが有益です。ただし、大規模なプロジェクトでは、クラスター内のすべてのサービスを正常に管理するための構成の可能性が必要です。
そのサイドカー プロキシは Rust で記述されています . Linkerd は Controller を使用します コントロール プレーンと Web Deployment 用 ダッシュボード用。さらに、メトリクスの探索と保存に Prometheus を利用し、ダッシュボードのレンダリングと表示に Grafana を利用しました。

Consul Connect
Consul は、最初はサービス検出ツールとして設計され、後にサービス メッシュに進化しました。 Linkerd とは異なり、Consul Connect には多くの構成が含まれているため、ネットワーク環境をより詳細に制御できます。したがって、Linkerdよりも使いにくいです。このオープンソース サービス メッシュはプラットフォームに依存しないため、Kubernetes や Nomad は必要ありません。それでも、ノマド Consul を介してマイクロサービス通信を管理するプロセスを簡素化します。

Microsoft のオープン サービス メッシュ
Open Service Mesh (OSM) は CNCF Envoy プロジェクトです 動的マイクロサービス アプリケーションを管理および保護するためのサービス メッシュ インターフェイスを実装します。 Envoy xDS を使用しています サイドカー コンテナーとして。その主な機能には、トラフィック シフティング、証明書管理、mTLS の有効化、自動サイドカー インジェクション、およびアクセス制御ポリシーが含まれます。
クマ
Kuma は、サービス メッシュ内で実行される Kubernetes および VM 用のオープン ソース コントロール プレーンです。 L4+L7 ポリシー アーキテクチャを備えています サービス ディスカバリ、ルーティング、ゼロトラスト セキュリティ、オブザーバビリティなどの機能を実装します。このプラットフォームは拡張性が高く、セットアップも簡単です。
OpenShift Service Mesh Red Hat
Red Hat は、マイクロサービス アプリケーションを管理するための OpenShift Service Mesh を開発しました。ネットワーク用の複数のインターフェースを提供し、Security Context Constraint でセキュリティを強化します . Jager でパフォーマンスを測定します Kiali を使用してサービス間のやり取りを観察します .さらに、OpenShift には Red Hat 3scale Istio Mixer Adapter が含まれています より良い API セキュリティのために。
AWS App Mesh
Amazon は、マイクロサービス アーキテクチャ内ですべてのサービスを管理する無料のサービス メッシュ ソフトウェアである App Mesh を開発しました。マイクロサービス アプリケーションに高可用性とエンド ツー エンドの可視性を提供します。 AWS App Mesh が AWS Fargate と統合 、Amazon ECS 、Amazon EC2 、Amazon EKS 、Kubernetes 、AWS Outposts .監視ツールを使用して、監視データを自動的にエクスポートします。
ネットワーク サービス メッシュ
Network Service Mesh はオープンソースの CNCF サンドボックス プロジェクトです .これは、単純な一連の API を使用して接続を容易にするハイブリッド/マルチクラウド IP サービス メッシュです。コンテナ内で実行されているサービスと外部エンドポイントとの間の接続を確立します。実装すると、Kubernetes への最小限の変更が必要になります。
まとめ
サービス メッシュは、マイクロサービス アーキテクチャを使用して開発されたアプリケーションの管理と保守を簡素化します。これにより、マイクロサービス アーキテクチャ内の全体的なセキュリティが向上し、トラフィック フローの可視性と可観測性が確保されます。全体として、サービス メッシュ機能はパフォーマンスを向上させ、開発サイクルをスピードアップします。さまざまなオープンソース ソリューションが利用できるので、アプリケーションのニーズに最適なものを見つけてください。
クラウドコンピューティング