Envoy を使用した Cloud Service Mesh の設定の準備

Cloud Service Mesh の設定には、次のフェーズがあります。

  1. 権限を付与し、Traffic Director API を有効にする。Compute Engine を使用している場合は、Cloud DNS を構成します。
  2. Envoy プロキシを使用してアプリケーションをデプロイする。
  3. トラフィックがサービス メッシュを通過する方法を決定するサービスとルーティング ルールを作成する。

このドキュメントでは、第 1 フェーズについて説明します。これは、以前の API を使用している場合に適用されます。2 番目と 3 番目のフェーズについては、このドキュメントの後半の設定プロセスを続行するをご覧ください。

このガイドを読む前に、Cloud Service Mesh の概要を理解しておいてください。サービス ルーティング API を使用している場合は、サービス ルーティング API の概要をご覧ください。

前提条件

Cloud Service Mesh を使用して、仮想マシン(VM)インスタンス、コンテナ、またはその両方にあるアプリケーションとともに動作する Envoy プロキシを構成する場合は、次の作業を先に行う必要があります。

  1. 課金の有効化
  2. Envoy のインストール方法を決定します。
  3. 必要な権限を付与します。
  4. プロジェクトで Traffic Director API を有効にします。
  5. Compute Engine を使用している場合は、Cloud DNS API を有効にして Cloud DNS を構成します。
  6. Envoy プロキシで使用されるサービス アカウントに、Traffic Director API へのアクセスに十分な権限があることを確認します。

以降のセクションでは、各作業の手順を説明します。

課金を有効にする

Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトの課金を有効化、無効化、または変更するをご覧ください。

Envoy のインストール方法を決める

Cloud Service Mesh を使用すると、Envoy プロキシのインストールとこのインフラストラクチャ レイヤの管理が容易になります。

  • Compute Engine では、VM 上で実行されるアプリケーションに Envoy を自動的に追加できます。Envoy をインストールし、Cloud Service Mesh に接続して VM のネットワーキングを構成する VM テンプレートを使用します。

  • Google Kubernetes Engine(GKE)では、サービスの Pod に Envoy サイドカー プロキシを自動的に追加できます。クラスタに Envoy サイドカー インジェクタをインストールすると、Envoy サイドカー プロキシが追加されて、Cloud Service Mesh に接続され、コンテナのネットワークが構成されます。

また、Cloud Service Mesh でサードパーティ プロバイダの Envoy デプロイ ソリューションを使用することもできます。このようなサービスの例が GetEnvoy です。このサービスを利用すると、パッケージ マネージャーベースのアプローチで Envoy プロキシのインストールと更新を行うことができます。

Envoy のバージョニングについて

Cloud Service Mesh と連携するには、Envoy がバージョン 1.9.1 以降であることが必要です。既知のセキュリティ上の脆弱性を軽減するために、常に最新の Envoy バージョンを使用することをおすすめします。

自動メソッドのいずれかを使用して Envoy をデプロイする場合、このタスクは以下のように自動的に処理されます。

  • Compute Engine VM で自動 Envoy デプロイを使用する場合、インストールされている Envoy のバージョンは、Cloud Service Mesh での動作について検証済みのバージョンです。インスタンス テンプレートを使用して新しい VM を作成すると、検証済みの最新バージョンが VM に送信されます。長時間実行される VM がある場合は、ローリング アップデートを使用して既存の VM を置き換え、最新のバージョンを取得できます。

  • GKE で Envoy サイドカー インジェクタを使用すると、Cloud Service Mesh との連携について検証済みの最新バージョンの Envoy を使用するようにインジェクタが構成されます。サイドカーがワークロード Pod とともに挿入されると、このバージョンの Envoy が返されます。より新しいバージョンの Envoy を選択する場合は、Envoy サイドカー インジェクタを更新してください。

特定の Envoy のバージョンについては、バージョン履歴をご覧ください。セキュリティの脆弱性の詳細については、セキュリティ アドバイザリをご覧ください。

必要な IAM 権限を付与する

VM インスタンスを作成し、ネットワークを変更して Cloud Service Mesh を構成するには、十分な Identity and Access Management(IAM)権限が付与されている必要があります。Cloud Service Mesh を有効にするプロジェクトのオーナーまたは編集者roles/owner または roles/editor)のロールがある場合は、適切な権限が自動的に付与されます。

それ以外の場合は、次の表に示されている Compute Engine IAM のロールがすべて必要です。これらのロールがある場合、Compute Engine IAM ドキュメントで説明されているように、関連する権限も付与されます。

タスク 必要なロール
サービス アカウントの IAM ポリシーの設定。 サービス アカウント管理者
roles/iam.serviceAccountAdmin
Cloud Service Mesh を有効にします。 Service Usage 管理者
roles/serviceusage.serviceUsageAdmin
ネットワーク、サブネット、負荷分散コンポーネントの作成。 Compute ネットワーク管理者
roles/compute.networkAdmin
ファイアウォール ルールの追加と削除。 Compute セキュリティ管理者
roles/compute.securityAdmin
インスタンスの作成。 Compute インスタンス管理者
roles/compute.instanceAdmin

GKE ノードプールまたは Compute Engine VM には https://www.googleapis.com/auth/cloud-platform スコープが必要です。詳細については、Envoy を使用するデプロイのトラブルシューティングをご覧ください。

xDS v3 では、Cloud Service Mesh Envoy クライアントが使用するサービス アカウントに roles/trafficdirector.client ロールを付与します。

Traffic Director API を有効にする

Console

  1. Google Cloud Console で、プロジェクトの [API ライブラリ] ページに移動します。

    [API ライブラリ] に移動

  2. [API とサービスを検索] に「Traffic Director」と入力します。

  3. 検索結果のリストで、[Traffic Director API] をクリックします。Traffic Director API が表示されない場合、Traffic Director API を有効にするために必要な権限がないことを示しています。

  4. [Traffic Director API] ページで、[有効にする] をクリックします。

gcloud

次のコマンドを実行します。

gcloud services enable trafficdirector.googleapis.com

Cloud DNS API を有効にして Cloud DNS を構成する

Compute Engine で Cloud Service Mesh を構成する場合は、次の操作を行います。DNS 名解決のために Cloud DNS API を有効にし、Cloud DNS を構成する必要があります。

Cloud Service Mesh と DNS の解決の背景情報については、Cloud Service Mesh と DNS の名前解決をご覧ください。

まず、以下の手順に沿って Cloud DNS API を有効にします。

Console

  1. Google Cloud Console で、プロジェクトの [API ライブラリ] ページに移動します。

    [API ライブラリ] に移動

  2. [API とサービスを検索] に「DNS」と入力します。

  3. 検索結果のリストで、[Cloud DNS API] をクリックします。Cloud DNS API が表示されない場合、Cloud DNS API を有効にするために必要な権限がないことを示しています。

  4. [Cloud DNS API] ページで、[有効にする] をクリックします。

gcloud

次のコマンドを実行します。

gcloud services enable dns.googleapis.com

次に、Cloud DNS 限定公開マネージド ゾーンを構成します。限定公開ゾーンの作成の手順を行います。

サービス アカウントで Traffic Director API にアクセスする

データプレーンを設定して Cloud Service Mesh に接続すると、xDS クライアント(Envoy プロキシなど)が trafficdirector.googleapis.com xDS サーバーに接続されます。この xDS クライアントは、サービス アカウント ID を xDS サーバーに提示して、データプレーンとコントロール プレーン間の通信が適切に承認されるようにします。

  • Compute Engine VM の場合、xDS クライアントは、VM に割り当てられたサービス アカウントを使用します。
  • GKE の場合、Workload Identity が有効になっていないと、xDS クライアントは基盤となる GKE ノードに割り当てられたサービス アカウントを使用します。
  • Workload Identity が有効になっている場合、xDS クライアントは Pod に割り当てられた Kubernetes サービス アカウントにバインドされている Google サービス アカウントを使用します。

次の権限が必要です。xDS v3 のみがサポートされています。xDS v2 を使用している場合は、xDS v3 に移行する必要があります。移行方法については、xDS v2 から xDS v3 に移行するをご覧ください。

xDS v3 を使用する場合、クライアントが使用するサービス アカウントには trafficdirector.networks.reportMetrics 権限と trafficdirector.networks.getConfigs 権限が必要です。IAM Cloud Service Mesh クライアントのロールroles/trafficdirector.client)を使用して、両方の権限をラップできます。

コンソール

  1. Google Cloud コンソールで、[IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. プロジェクトを選択します。

  3. ロールを追加するサービス アカウントを特定します。

    • サービス アカウントがまだメンバーリストに含まれていない場合、サービス アカウントには何もロールが割り当てられていません。[追加] をクリックし、サービス アカウントのメールアドレスを入力します。
    • このサービス アカウントがすでにメンバーリストに含まれている場合、サービス アカウントには既存のロールがあります。サービス アカウントを選択して [ロール] タブをクリックします。
  4. ロールを展開します。編集するサービス アカウントで [編集] をクリックします。

  5. [その他] > [Cloud Service Mesh Client] のロールを選択します。

  6. ロールをサービス アカウントに適用するには、[保存] をクリックします。

gcloud

次のコマンドを実行します。

gcloud projects add-iam-policy-binding PROJECT \
    --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/trafficdirector.client

次のように置き換えます。

  • PROJECT: 「gcloud config get-value project」と入力します。
  • SERVICE_ACCOUNT_EMAIL: サービス アカウントに関連付けられたメール

設定プロセスを続行する

前提条件の手順を完了したら、サービス メッシュの設定を開始できます。