Cloud Service Mesh の概要
Cloud Service Mesh は、Google Cloud とサポートされている GKE Enterprise プラットフォームで利用可能なサービス メッシュです。さまざまなコンピューティング インフラストラクチャで実行されるサービスをサポートしています。Cloud Service Mesh は、Google Cloud、オープンソース、またはその両方用に設計された API によって制御されます。
このドキュメントは、Cloud Service Mesh を初めて使用するユーザー、または、Anthos Service Mesh もしくは Traffic Director の継続的なお客様を対象としています。
サービス メッシュとは
サービス メッシュは、サービス間で管理され、監視可能で安全な通信を実現するアーキテクチャです。これにより、選択したインフラストラクチャ上に多くのマイクロサービスで構成される堅牢なエンタープライズ アプリケーションを簡単に作成できます。サービス メッシュは、モニタリング、ネットワーキング、セキュリティなど、サービスを実行するための一般的な要件を整合性のある強力なツールで管理します。このため、サービス デベロッパーやオペレーターはアプリケーションの開発と管理に専念しやすくなります。
アーキテクチャ上、サービス メッシュは 1 つ以上のコントロール プレーンとデータプレーンで構成されます。サービス メッシュは、サービス間のすべてのトラフィックをモニタリングします。Kubernetes では、プロキシはメッシュのマイクロサービスにサイドカー パターンによってデプロイされます。Compute Engine では、VM にプロキシをデプロイするか、データプレーンにプロキシレス gRPC を使用できます。
このパターンにより、アプリケーション ロジックまたはビジネス ロジックがネットワーク機能から切り離されるため、デベロッパーはビジネスに必要な機能に集中できます。また、サービス メッシュを使用すると、運用チームと開発チームはお互いの作業を分離できます。
アプリケーションをマイクロサービスとして設計することには、多くのメリットがあります。ただし、ワークロードが増大することで、複雑で断片的になる可能性があります。サービス メッシュは、断片化の問題を解決し、マイクロサービスを簡単に管理するのに役立ちます。
Cloud Service Mesh とは
Cloud Service Mesh は、Google Cloud とサポートされている GKE Enterprise 環境の両方に対応した Google のソリューションです。
- Google Cloud の場合、Cloud Service Mesh には、ワークロードが実行されるコンピューティング インフラストラクチャに固有の API が用意されています。
- Compute Engine ワークロードの場合、Cloud Service Mesh は Google Cloud 固有のサービス ルーティング API を使用します。
- Google Kubernetes Engine(GKE)ワークロードの場合、Cloud Service Mesh はオープンソースの Istio API を使用します。
- Google Cloud 以外: Distributed Cloud または GKE マルチクラウドでは、Cloud Service Mesh は Kubernetes ワークロードの Istio API をサポートします。
Google Cloud の内部や外部に関わらず、Cloud Service Mesh を使用すると、アプリケーション コードを変更することなく、サービスの管理、モニタリング、保護を行うことができます。
Cloud Service Mesh は、トラフィック管理やメッシュ テレメトリー、サービス間の通信の保護などのサービス提供を簡素化して、運用チームと開発チームのためにトイルを軽減します。Google のフルマネージド サービス メッシュを使用すると、複雑な環境を管理し、マイクロサービスのあらゆるメリットを享受できます。
機能
Cloud Service Mesh には、トラフィック管理、オブザーバビリティとテレメトリー、セキュリティのための一連の機能が用意されています。
トラフィック管理
Cloud Service Mesh は、メッシュ内のサービス間のトラフィック、メッシュに向かう(内向き)トラフィック、外部サービスへの(外向き)トラフィックのフローを制御します。このトラフィックがアプリケーション(L7)レイヤで管理されるようにリソースを構成してデプロイします。たとえば、次のことを行います。
- サービス ディスカバリを使用します。
- サービス間のロード バランシングを構成します。
- カナリア デプロイと Blue/Green デプロイを作成します。
- サービスのルーティングを細かく制御します。
- サーキット ブレーカーを設定します。
Cloud Service Mesh では、メッシュ内のすべてのサービスのサービス レジストリを名前別およびそれぞれのエンドポイント別に管理します。このリストを維持して、トラフィック フロー(Kubernetes Pod の IP アドレス、マネージド インスタンス グループ内の Compute Engine VM の IP アドレスなど)を管理します。メッシュは、このサービス レジストリを使用してサービスと同時にプロキシを実行することで、適切なエンドポイントにトラフィックを転送します。プロキシレス gRPC ワークロードは、Envoy プロキシを使用するワークロードと並行して使用することもできます。
オブザーバビリティの分析情報
Google Cloud コンソールの Cloud Service Mesh ユーザー インターフェースには、サービス メッシュに関する分析情報が表示されます。これらの指標は、Istio API を通じて、構成されたワークロードに対して自動的に生成されます。
- メッシュの GKE クラスタ内の HTTP トラフィックに関するサービスの指標とログが、Google Cloud に自動的に取り込まれます。
- 事前構成されたサービス ダッシュボードに、サービスを理解するために必要な情報が表示されます。
- 高度なテレメトリー(Cloud Monitoring、Cloud Logging、Cloud Trace によって実現)では、サービスの指標とログを深く掘り下げることができます。さまざまな属性でデータをフィルタ、セグメント化できます。
- サービス同士の関係は、サービス間の依存関係と、各サービスに接続しているユーザーをひと目で把握するのに役立ちます。
- 自分のサービスだけでなく、他のサービスとの関係のコミュニケーション セキュリティの分析情報もすばやく確認できます。
- サービスレベル目標(SLO)により、サービスの状態についての分析情報を取得できます。サービスの状態に関する独自の基準を使用して SLO とアラートを定義できます。
Cloud Service Mesh のオブザーバビリティ機能の詳細については、オブザーバビリティ ガイドをご覧ください。
セキュリティ上のメリット
Cloud Service Mesh には多くのセキュリティ上のメリットがあります。
- 盗まれた認証情報によるリプレイまたはなりすまし攻撃のリスクを軽減する。 Cloud Service Mesh では、JSON Web Token(JWT)などの署名なしトークンではなく、相互 TLS 証明書(mTLS)を使用してピアを認証します。
- 通信中の暗号化を保証する。認証に mTLS を使用すると、すべての TCP 通信が通信中に暗号化されます。
- クライアントのネットワークのロケーションやアプリケーション レベルの認証情報にかかわらず、不正なクライアントがセンシティブ データを含むサービスにアクセスするリスクを軽減します。
- 本番環境ネットワーク内でユーザーデータ侵害のリスクを軽減する。 インサイダーが機密データにアクセスするときには、必ず承認されたクライアントを使用するようにします。
- 機密データのあるサービスにアクセスしたクライアントを識別する。 Cloud Service Mesh のアクセス ロギングを使用すると、IP アドレスだけでなく、クライアントの mTLS ID も収集できます。
- クラスタ内コントロール プレーンのすべてのコンポーネントは、FIPS 140-2 認証取得済みの暗号化モジュールを使用して構築されています。
Service Mesh のセキュリティ上の利点と機能の詳細については、セキュリティ ガイドをご覧ください。
デプロイのオプション
Cloud Service Mesh では、次のデプロイ オプションがあります。
- Google Cloud
- マネージド Cloud Service Mesh - GKE 向けのマネージド コントロール プレーンとデータプレーン(推奨)
- マネージド Cloud Service Mesh - VM を使用した Compute Engine のマネージド コントロール プレーンとデータプレーン(推奨)
- Istio API を使用した GKE のクラスタ内コントロール プレーン(非推奨)
- Google Cloud
- Istio API を使用した Kubernetes のクラスタ内コントロール プレーン
マネージド Cloud Service Mesh
マネージド Cloud Service Mesh は、すべてのインフラストラクチャのマネージド コントロール プレーンと GKE のマネージド データプレーンで構成されます。マネージド Cloud Service Mesh では Google がアップグレード、スケーリング、セキュリティに関する作業を行い、ユーザー側の手動メンテナンスの必要性は最小限に抑えられます。これには、コントロール プレーン、データプレーン、関連リソースが含まれます。
データプレーンの実装
Google Cloud APIs を使用する場合、データプレーンは Envoy プロキシまたはプロキシレス gRPC アプリケーションによって提供されます。既存のアプリケーションを更新する場合、サイドカー ベースのアプローチによって、アプリケーションを変更せずにメッシュに統合できます。サイドカー実行のオーバーヘッドを回避するには、gRPC を使用するようにアプリケーションを更新します。
Envoy プロキシとプロキシレス gRPC はどちらも、xDS API を使用してコントロール プレーンに接続します。プロキシレス gRPC を使用する場合は、Go、C++、Java、Python など、アプリケーションでサポートされている言語を選択できます。
オープンソースの Istio API を使用する場合、データプレーンは Envoy プロキシによって提供されます。
コントロール プレーンの実装
Cloud Service Mesh コントロール プレーンは、構成が Google Cloud でオンかオフか、新規のお客様かによって異なります。
既存ユーザー向けのコントロール プレーンの実装
- 構成が Google Cloud 以外になっている場合、Cloud Service Mesh の非マネージドのクラスタ内コントロール プレーンを使用しています。詳細については、クラスタ内コントロール プレーンでサポートされている機能をご覧ください。
- Google Cloud で Anthos Service Mesh のユーザーだった場合は、Istio API を使用しています。詳細については、Istio API を使用したサポートされている機能(マネージド コントロール プレーン)をご覧ください。
- Traffic Director のユーザーである場合、Google Cloud APIs で Cloud Service Mesh のマネージド コントロール プレーンを使用しています。詳細については、Google Cloud APIs を使用する Cloud Service Mesh の対応機能をご覧ください。
現在のコントロール プレーンを確認するには、コントロール プレーンの実装を特定するをご覧ください。コントロール プレーンとコントロール プレーンの移行の詳細については、継続的なお客様向けのマネージド コントロール プレーンの概要をご覧ください。
新規ユーザー向けのコントロール プレーンの実装
- Google Cloud 以外の構成を計画している場合は、Cloud Service Mesh の非マネージドのクラスタ内コントロール プレーンを選択します。詳細については、クラスタ内コントロール プレーンでサポートされている機能をご覧ください。
- Kubernetes で Google Cloud 上の構成を計画している場合、Istio API を選択しますが、コントロール プレーンは Traffic Director の実装を使用します。ただし、コントロール プレーンの実装を決定する要素で説明されている特定のケースを除きます。詳細については、Istio API を使用したサポートされている機能(マネージド コントロール プレーン)をご覧ください。
- Compute Engine VM で Google Cloud 上の構成を計画している場合、コントロール プレーンは、Traffic Director 実装と呼ばれるグローバルなマルチテナント コントロール プレーンを使用します。詳細については、Google Cloud APIs を使用する Cloud Service Mesh の対応機能をご覧ください。
コントロール プレーンの移行
Anthos Service Mesh の継続的なお客様で、Istio API を使用している場合、クラスタは Traffic Director コントロール プレーンに移行を開始します。構成には引き続き Istio API を使用できます。
クラスタで Istio コントロール プレーンが引き続き使用されているか、新しいグローバル コントロール プレーンに移行されているかを確認するには、コントロール プレーンの実装を特定するをご覧ください。
次のステップ
- 継続して使用している場合は、継続して使用しているお客様向けのマネージド コントロール プレーンをご覧ください。
- GKE で設定する場合は、コントロール プレーンをプロビジョニングするをご覧ください。
- Compute Engine と VM で設定する場合は、Envoy とプロキシレス ワークロードを使用したサービス ルーティング API の設定の準備をご覧ください。