The New Stackによると、サービスメッシュとは「分散システムのセキュリティ、オブザーバビリティ(可観測性)、トラフィック制御を向上させる」ことを目的としたテクノロジーです。さらに具体的に言うと、Kubernetesなどのコンテナ環境向けオーケストレーションツールの一部であり、一般的にはコンテナ化されたアプリケーション間におけるトラフィックのルーティングなどの機能を担います。自律的なサービス間の相互TLS(mTLS)ポリシーを定義・適用し、アプリケーションの可用性とセキュリティの可視化を提供するためのインターフェイスとして動作します。サービスメッシュは、Kubernetes全体と同様に、コントロールプレーン、管理プレーン、データプレーンで構成されます。
一般的に、サービスメッシュのトラフィック管理とセキュリティは、コンテナ化されたアプリケーションに対して透過的に処理されます。サービスメッシュがSSL/TLSやロードバランシングなどの機能をオフロードすることで、開発者はアプリケーションごとにセキュリティやサービスの可用性を実装しなくても済むようになります。エンタープライズグレードのサービスメッシュは、以下のようにさまざまな問題に対するソリューションを提供します。
- エンドツーエンドの暗号化とmTLSによるトラフィックの安全性確保
- インジェクションやサイドカーの管理によるオーケストレーション、およびKubernetes APIの統合
- ロードバランシング、トラフィック制御(レート制限、サーキットブレーカー)、トラフィックシェーピング(カナリアデプロイメント、A/Bテスト、ブルーグリーンデプロイメント)を含むサービストラフィックの管理
- PrometheusやGrafanaなどの一般的なツールによるサービス間トラフィックの監視と可視性の向上
- Ingressコントローラーとのネイティブな統合により、KubernetesのIngress/Egressトラフィックの管理を簡素化
サービスメッシュは、小規模で焦点を絞ったものから、ネットワークやクラスターの管理ツール(Istioなど)を包括的に備えた大規模なものまで、対象範囲が多様です。サービスメッシュがより大規模で複雑になるほど、管理プレーンの有用性と独立性が高くなります。
サービスメッシュ使用の判断
サービスメッシュは、マネージドクラスターにおけるアプリケーションのトラフィック管理用ツールとして優れていますが、Kubernetesで欠かせない要素というわけではありません。どのような追加ツールにも言えることですが、ユーザのトレーニング、新たな管理要件、既存のCI/CDパイプラインへの統合などのオーバーヘッドを伴います。サービスメッシュに投資する前に、現在のユースケースと計画中のユースケースの中で、どのようなものがサービスメッシュの恩恵を受けるかを特定することが重要です。
メッシュの準備ができているかどうかを判断し、次のステップに進むには、当社ブログ「サービスメッシュの選び方」をお読みください。
- 準備ができているかどうかを判断するための6つのチェックリスト
- 最適なメッシュを選択するための3ステップのプロセス
- NGINX Service Meshの概要
NGINXはどのように役立ちますか?
サービスメッシュが必要であると判断した際に、どれを採用するかはユースケース次第です。「メッシュで何を管理するのか?」と自分自身に問いかけてみましょう。
- 答えが「アプリケーションのトラフィック管理、セキュリティ、ガバナンス」であれば、NGINX Service Meshのように、コントロールプレーンではなく、データプレーンに焦点を当てたメッシュを選択します。軽量でありながら包括的な機能を備え、NGINX Plusを活用してエンタープライズグレードのトラフィック管理とセキュリティツールをKubernetes環境に提供します。
- 答えが「Kubernetesのクラスターとネットワークの管理」であれば、Istioのような機能豊富なメッシュでF5のAspen Meshを独立した管理プレーンとして使用することをお勧めします。