VMware Tanzu for Kubernetes Operations (以下、 TKO ) TKO Blog シリーズ第 1 回 「Kubernetes 環境の本番運用からマルチクラウドへの拡張まで」の記事ではマルチクラウド対応を見据えた形で、モダンアプリケーションプラットフォームの本番運用で必要になる要素を包括的に提供する TKO のご紹介をしています。

さらに、第2回ではTanzu Kubernetes Grid( TKG )を、第3回では「VMware Aria Operations for Applications(旧称 Tanzu Observability)」をそれぞれご紹介しております。

本記事ではマイクロサービスを実装するにあたって必要となるサービスメッシュを実現する製品であるTanzu Service Mesh について概要を解説します。実際に構築する際は「Tanzu Service Mesh を触ってみよう」の記事をご覧ください。

図.TKOと本記事の対象(TSM)

マイクロサービスの課題

エンタープライズクラスのモノリシックアプリケーションから分散マイクロサービスアーキテクチャへの移行は、柔軟なアーキテクチャの選択、拡張性と可用性の向上、リリース頻度の高速化、メンテナンスの容易化といったことを実現します。その一方で、分散マイクロサービスの採用にあたって以下のような課題が浮き彫りになってきました。

  • サービスの状態に対する運用上の可視性の確立、維持
  • 分散マイクロサービス全体での接続、ルーティング、ロードバランシング、および通信の保護
  • 関連するサービス間の待ち時間の短縮
  • 様々なプログラミング言語で記述された多数のサービスから構成されるアプリケーションの問題のトラブルシューティングと根本原因の特定

また、マイクロサービスをマルチクラウドで展開する場合、上記に加えて次のような課題も出てきます。

  • 運用のサイロ化
  • 複数のAPI を頻繁に使用するためシステムが複雑化
  • ワークロードが実行されている場所に応じてサービスを管理するための要件への対応

これらの課題へ対処するために企業は多くのリソースを割かなければならず、せっかくのマイクロサービスによる開発リソースの効率化などのメリットが帳消しになってしまう可能性があります。

図.マイクロサービスの例

マイクロサービスの登場初期はクライアントライブラリと API ゲートウェイを使用して上記の課題を解決していましたが、多数の API を利用することによるシステムの複雑化などの課題は解決が難しい状況でした。

これらの課題に対して、サービスメッシュという概念が取り入れられ、実際に様々なマルチクラウドを含めたマイクロサービス環境に実装されています。

サービスメッシュとは

サービスメッシュではすべてのサービス間の通信は各サービスの前、または Pod 群をホストしているノード上に配置されたプロキシを経由し、必要な機能 (サービスディスカバリ、接続の暗号化、エラーと障害の処理、レイテンシーの検出と応答) はプロキシで実行します。

本記事の執筆時点( 2023 年 1 月)では各サービスの前に配置するプロキシ(サイドカーと呼ばれます)として Envoy を利用しそれをコントロールする Istio という OSS がデファクトスタンダードとなっていますが、他にも Linkerd や AppMesh など様々なサービスメッシュ製品が提供されています。

図.サイドカーを用いたサービスメッシュのイメージ

サービスメッシュ製品として必要となる機能としては下記が挙げられます。

  • サービス間通信(サービスディスカバリ、暗号化などを含む)
  • オブザーバビリティ(モニタリング、トレーシング)
  • 耐障害性(サーキットブレーカー、再試行)
  • トラフィック管理(ルーティング、ロードバランシング)
  • セキュリティ(認証、暗号化)

Tanzu Service Mesh の特徴

■ Istio を拡張したマルチクラウド向けのサービスメッシュ機能

Tanzu Service Mesh は Istio をベースにしたエンタープライズレベルのサービスメッシュ機能と商用サポートを提供しています。それに加えて、Istio 単体では実現が難しかったマルチクラウド・マルチプラットフォーム環境上のマイクロサービスに対する一貫した接続性・セキュリティ・可視性・スケールといったニーズに対応するため多数のアドオンを提供しています。

図.Istio をベースとしたTanzu Service Mesh

TSM は Istio 単体では実現の難しい以下の機能をサポートしています。

  • 商用サポート
  • クラスタを跨いでのネットワーク一括設定(ルーティング、アクセス制御、mTLS 暗号化 など)
  • サービスレベル目標( SLO )の設定によるアプリケーションパフォーマンスの可視化
  • Tanzu Service Mesh Autoscaler を利用したオートスケーリング
  • Tanzu Mission Control、Tanzu Kubernetes Grid など他の VMware 製品との連携 等

■ SaaS 型ソリューション

コントロールプレーンは SaaS として提供されており、マルチクラスタおよびマルチプラットフォーム環境に対しても一貫した運用を実現できます。

図.SaaS型ソリューションとしての提供

■ Tanzu Service Mesh のアーキテクチャ

図.Tanzu Service Mesh のアーキテクチャ

  • グローバルコントローラ & オブザーバ
    VMware が SaaS として提供し、制御、セキュリティ、可視性、オートスケーリング機能を提供するマイクロサービスの集合体です。
  • ローカルコントローラ:
    各クラスタで動作し、クラスタがグローバルコントローラから切り離された場合の耐障害性を提供します。
  • サイドカー:
    各サービスと同じ Pod で動作し、サービスメッシュ内の East-West トラフィックを処理します。上記の図では「 SC 」であらわされています。
  • TSM ゲートウェイ:
    各クラスタで動作し、サービスメッシュに出入りする North-South トラフィックを処理します。すなわち Ingress / Egress ゲートウェイとして動作します。

■ Global Namespace

Global Namespace ( GNS ) は TSM の独自の概念であり、アプリケーションの境界を定義するものです。アプリケーションを構成するリソースとワークロードを1つの仮想ユニットに接続し、複数のクラスタとクラウドにわたるアプリケーションに一貫したトラフィックルーティング、接続性、回復力、およびセキュリティを提供します。

各 GNS は自動のサービスディスカバリを提供し、その GNS 内のサービス Identity を管理する分離されたドメインです。

図.Global Namespace のイメージ

GNS は以下の機能を管理します。

  • サービスディスカバリ/ DNS:GNS 内のサービスは自動で取得され、クラスタを跨いで使用可能なサービスの名前解決情報を伝搬させます。
  • Identity / ポリシー:リソースを識別して別のリソースに対して認証する方法を定義します。各 GNS には、その GNS 内のリソースの Identity をプロビジョニングする独自の認証局 ( CA ) があります。
  • トラフィックルーティング:GNS 内外のリソース間通信を確立しトラフィックをルーティングする方法を定義します。
  • セキュリティ:リソースのセキュリティを管理します。例えば、リソース間のすべてのトラフィックに対し Mutual Transport Layer Security 認証 ( mTLS ) の利用を強制できます。
  • オブザーバビリティ:サービス、クラスタ、ノードのメトリックなどのテレメトリデータを GNS ごとに集約しており、GraphQLを利用してテレメトリデータの抽出等を行えます。

図.Tanzu Service Mesh ユーザーインターフェースにおける Global Namespace の一覧

■クラスタ間における通信の mTLS による暗号化

Tanzu Service Mesh では Global Namespace  ( GNS ) を使用して、GNS 内に存在するクラスタを跨いだサービス間の HTTP およびgRPC 通信を mTLS によって暗号化できます。これによりデータ保護とコンプライアンスのニーズに合わせて、サービスメッシュ内のすべての転送中のデータを保護することができます。

実装の方法としては、GNS にはクラスタを跨いでサービスを含めることができるため、クラスタを跨いで認証局情報の配布が行われ、同じクラスタ内のサービス間はもちろん、あるクラスタ内のサービスから別のクラスタ内のサービスへ向かうようなトラフィックにも mTLS によるエンドツーエンドの暗号化を適用することができる、というものになります。これは Istio 単体では実装することが難しく、TSM の大きな特長となっています。

図.Tanzu Service Mesh ユーザーインターフェースにおける通信とトポロジーの表示

■サービスレベル目標( SLO )の定義

マイクロサービスの運用において、待ち時間やエラー率などのユーザーエクスペリエンスの品質を示す要素を測定・監視することが重要です。

TSM ではデフォルトで様々なメトリック( SLI : Service Level Indicator )を提供しており、これを組み合わせてサービスレベル目標( SLO )を定義、順守状態のリアルタイムの可視化をすることが可能です。

図.SLO の構成画面

図.構成した SLO の準拠状態とメトリックの監視画面

 

TSM には他にも様々な機能があり、機能の追加や改善が行われています。その他の機能についてはドキュメントを、VMware Explore 2022 で発表された機能の詳細はこちらをご参照ください。

まとめ

今回の記事では、アプリケーションエンドユーザー、マイクロサービス、API 、およびデータ全体にわたって、モダンアプリケーションに高度なエンドツーエンドの接続性、セキュリティ、および可視性を提供し、サービス レベル目標 ( SLO ) およびデータ保護とプライバシー規制への準拠を可能にする Tanzu Service Mesh の概要をご紹介しました。

TKO Blog シリーズでは TSM の詳細や TKO に含まれる他の Tanzu 製品についてもご紹介しておりますので是非ご覧ください!