Cloud Service Mesh の概要
Cloud Service Mesh は、 Google Cloudとサポートされている GKE Enterprise プラットフォーム全体で利用可能なサービス メッシュです。さまざまなコンピューティング インフラストラクチャで実行されるサービスに対応しています。その制御は、 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 API を使用する場合、データプレーンは 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 を使っていた場合は、Cloud Service Mesh のマネージド コントロール プレーンを Google Cloud APIs とともに使っていることになります。詳細については、 Google Cloud API を使用する 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 API を使用する Cloud Service Mesh でサポートされている機能をご覧ください。
コントロール プレーンの移行
Anthos Service Mesh の継続的なお客様で、Istio API を使用している場合、クラスタが Traffic Director コントロール プレーンに移行を開始します。構成には引き続き Istio API を使用できます。
クラスタで Istio コントロール プレーンが引き続き使用されているか、新しいグローバル コントロール プレーンに移行されているかを確認するには、コントロール プレーンの実装を確認するをご覧ください。
次のステップ
- 継続して使用している場合は、継続して使用しているお客様向けのマネージド コントロール プレーンをご覧ください。
- GKE で設定する場合は、コントロール プレーンのプロビジョニングに関するページをご覧ください。
- Compute Engine と VM で設定する場合は、Envoy とプロキシレス ワークロードを使用したサービス ルーティング API の設定の準備をご覧ください。