Envoy とプロキシレス ワークロードを使用したサービス ルーティング API の設定の準備
このドキュメントでは、Envoy プロキシまたはプロキシレス gRPC をデータプレーンとして使用し、サービス ルーティング API を使用して Cloud Service Mesh を設定するための前提条件となるタスクについて説明します。
Cloud Service Mesh の設定にはいくつかのフェーズがあります。このドキュメントでは、最初のフェーズ(VM インスタンスまたはプロキシレス gRPC アプリケーションで Cloud Service Mesh を構成する準備)について説明します。追加のフェーズについては、このドキュメントの最後にある設定プロセスを続行するに記載されているプラットフォーム固有のガイドをご覧ください。
このガイドを読む前に、次のドキュメントを参照して、サービス ルーティング API と Gateway API での Cloud Service Mesh の使用に関する概要をよく理解してください。
前提条件
次のタスクを行って環境を準備します。
- ビジネスニーズに合わせてプロジェクトを設定します。
- 課金の有効化
- 必要な権限を付与します。
- プロジェクトで Traffic Director API などの API を有効にします。
- Traffic Director API にアクセスするために十分な権限がサービス アカウントに付与されていることを確認します。
- Cloud DNS API を有効にして Cloud DNS を構成します。
以降のセクションでは、これらの作業手順を説明します。
プロジェクトを設定する
プロジェクトを設定、管理するには、プロジェクトの作成と管理と関連ドキュメントをご覧ください。
課金を有効にする
Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトの課金を有効化、無効化、または変更するをご覧ください。
必要な IAM 権限を付与する
VM インスタンスを作成し、ネットワークを変更して Cloud Service Mesh を構成するには、十分な Identity and Access Management(IAM)権限が付与されている必要があります。Cloud Service Mesh を有効にするプロジェクトのオーナーまたは編集者(roles/owner
または roles/editor
)のロールがある場合は、適切な権限が自動的に付与されます。
それ以外の場合は、次の表に示されている 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 ) |
サービス アカウントへのアクセスを許可します。 | サービス アカウント ユーザー ( roles/iam.serviceAccountUser ) |
必要なタスクを実行するようにサービス アカウントを有効にします。 | サービス アカウント ユーザー
( roles.trafficdirector.client) |
Compute Engine VM には https://www.googleapis.com/auth/cloud-platform
スコープが必要です。詳細については、プロキシレス gRPC を使用したデプロイのトラブルシューティングをご覧ください。
サービス アカウントで Traffic Director API にアクセスする
データプレーンを設定して Cloud Service Mesh に接続すると、xDS クライアント(Envoy プロキシまたはプロキシレス gRPC クライアント)が trafficdirector.googleapis.com
xDS サーバーに接続します。この xDS クライアントは、サービス アカウント ID を xDS サーバーに提示して、データプレーンとコントロール プレーン間の通信が適切に承認されるようにします。
Compute Engine VM の場合、xDS クライアントは、VM に割り当てられたサービス アカウントを使用します。
構成を変更しない限り、Google Cloud は Compute Engine のデフォルトのサービス アカウントを使用します。
サービス アカウントに Traffic Director API へのアクセス権を付与するには、次の手順を使用します。
コンソール
Google Cloud コンソールで、[IAM と管理] ページに移動します。
プロジェクトを選択します。
ロールを追加するサービス アカウントを特定します。
- サービス アカウントがまだメンバーリストに含まれていない場合、サービス アカウントには何もロールが割り当てられていません。[追加] をクリックし、サービス アカウントのメールアドレスを入力します。
- このサービス アカウントがすでにメンバーリストに含まれている場合、サービス アカウントには既存のロールがあります。サービス アカウントを選択して [ロール] タブをクリックします。
ロールを展開します。編集するサービス アカウントで [
編集] をクリックします。[その他] > [Traffic Director Client] のロールを選択します。
ロールをサービス アカウントに適用するには、[保存] をクリックします。
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
: サービス アカウントに関連付けられたメール
必要な API を有効にする
次の必要な API を有効にします。
- osconfig.googleapis.com
- trafficdirector.googleapis.com
- compute.googleapis.com
- networkservices.googleapis.com
必要な API を有効にするには、次の手順を使用します。
コンソール
Google Cloud Console で、プロジェクトの [API ライブラリ] ページに移動します。
[API とサービスを検索] に「
Traffic Director
」と入力します。検索結果のリストで、[Traffic Director API] をクリックします。Traffic Director API が表示されない場合、Traffic Director API を有効にするために必要な権限がないことを示しています。
[Traffic Director API] ページで、[有効にする] をクリックします。
[API とサービスを検索] に「
OS Config
」と入力します。検索結果のリストで [OS Config] をクリックします。OS Config API が表示されない場合は、Traffic Director API を有効にするために必要な権限がないことを示しています。
[OS Config API] ページで、[有効にする] をクリックします。
[API とサービスを検索] に「
Compute
」と入力します。検索結果のリストで、[Compute Engine API] をクリックします。Compute Engine API が表示されない場合は、Compute Engine API を有効にするために必要な権限がないことを示しています。
[Compute Engine API] ページで、[有効にする] をクリックします。
[API とサービスを検索] に「
Network Services
」と入力します。検索結果のリストで、[Network Services API] をクリックします。Network Services API が表示されない場合は、Network Services API を有効にするために必要な権限がないことを示しています。
[Network Services API] ページで、[有効にする] をクリックします。
gcloud
次のコマンドを実行します。
gcloud services enable osconfig.googleapis.com \ trafficdirector.googleapis.com \ compute.googleapis.com \ networkservices.googleapis.com
xDS バージョン
サービス ルーティング API では xDS v3 を使用する必要があります。xDS v2 から xDS v3 にデプロイメントを更新する方法については、xDS コントロール プレーン API をご覧ください。
Envoy プロキシの追加要件
このセクションでは、サービス ルーティング API と Envoy プロキシで Cloud Service Mesh を使用する場合の追加の要件について説明します。プロキシレス gRPC を使用してデプロイする場合は、プロキシレス gRPC の追加の要件をご覧ください。
Envoy のインストール方法
Cloud Service Mesh のデプロイ プロセスで、アプリケーションが実行される VM に Envoy を自動的にインストールする VM テンプレートを作成します。
Envoy のバージョンについて
Cloud Service Mesh と連携するには、Envoy がバージョン 1.20.0 以降であることが必要です。既知のセキュリティ上の脆弱性を軽減するために、常に最新の Envoy バージョンを使用することをおすすめします。
自動メソッドのいずれかを使用して Envoy をデプロイする場合、このタスクは以下のように自動的に処理されます。
Compute Engine VM での自動 Envoy デプロイでは、Cloud Service Mesh で動作することが検証済みの Envoy バージョンがインストールされます。インスタンス テンプレートを使用して新しい VM を作成すると、検証済みの最新バージョンが VM に送信されます。長時間実行される VM がある場合は、ローリング アップデートを使用して既存の VM を置き換え、最新のバージョンを取得できます。
特定の Envoy のバージョンについては、バージョン履歴をご覧ください。セキュリティの脆弱性の詳細については、セキュリティ アドバイザリをご覧ください。
プロキシレス gRPC の追加の要件
このセクションでは、サービス ルーティング API とプロキシレス gRPC で Cloud Service Mesh を使用する場合の追加の要件について説明します。Envoy プロキシを使用してデプロイする場合は、Envoy プロキシの追加の要件をご覧ください。
プロキシレス gRPC の全体的なプロセス
プロキシレス gRPC アプリケーションをサービス メッシュに設定するために、以下のすべての手順を行ってください。
- gRPC クライアントに最新のパッチを適用して最新バージョンの gRPC に更新します。
- チャネルを作成し、Cloud Service Mesh ブートストラップ ファイルを指定する際、クライアントの gRPC 名前解決スキームを更新します。
- Cloud Service Mesh と Cloud Load Balancing のリソースを構成します。
このドキュメントでは、最初の 2 つのステップを完了するための情報を提供します。ステップ 3 で使用する構成プロセスは、デプロイで Compute Engine VM または GKE ネットワーク エンドポイント グループ(NEG)を使用するかどうかによって異なります。
サポートされている gRPC のバージョンと言語
gRPC はオープンソース プロジェクトです。リリースのサポートについては、gRPC に関するよくある質問をご覧ください。既知のセキュリティ脆弱性を回避するため、最新バージョンの gRPC を使用することをおすすめします。これにより、Cloud Service Mesh でサポートされている最新機能にアプリケーションでアクセスできるようになります。gRPC のさまざまな実装とバージョンでサポートされているサービス メッシュ機能の一覧については、GitHub をご覧ください。Cloud Service Mesh とプロキシレス gRPC サービスでサポートされている gRPC 言語と機能の一覧については、Cloud Service Mesh の機能をご覧ください。
Cloud Service Mesh は、gRPC の現在のバージョンおよびサポート対象のバージョンと互換性を維持しています。また、Google Cloud Platform の利用規約に基づき、更新期限を経過してから 1 年未満の gRPC バージョンと互換性を維持するよう努めています。
gRPC クライアントを更新する
アプリケーションの gRPC ライブラリを、必要な機能をサポートするバージョンに更新します。詳しくは、前のセクションをご覧ください。
gRPC アプリケーションの依存関係として xDS の名前リゾルバを追加します。 以降のセクションでは、Java と Go それぞれの要件について説明します。他の言語には追加の要件はありません。
Java の要件
Java で Gradle を使用している場合は、build.gradle
ファイルに grpc-xds
依存関係を追加します。LATEST_GRPC_VERSION
は、最新バージョンの gRPC に置き換えます。
dependencies { runtimeOnly 'io.grpc:grpc-xds:LATEST_GRPC_VERSION' }
Maven を使用している場合は、pom.xml の <dependencies>
セクションに以下のコードを追加します。LATEST_GRPC_VERSION
は、最新バージョンの gRPC に置き換えます。
<dependency> <groupId>io.grpc</groupId> <artifactId>grpc-xds</artifactId> <version>LATEST_GRPC_VERSION</version> <scope>runtime</scope> </dependency>
Go の要件
Go を使用している場合は、xds Go パッケージをインポートします。
xds
を使用するように gRPC 名前リゾルバを設定する
gRPC アプリケーションを設定または変更し、ターゲット URI の xds
名前解決スキームを使用します。DNS やその他の解決スキームは使用しません。このために、gRPC チャネルを作成する際は、ターゲット名に接頭辞 xds:///
を使用します。gRPC クライアントの負荷分散はチャネル単位で行われます。
Cloud Service Mesh の構成でターゲット URI で使用されているサービス名を含めます。たとえば Java では、次の構造を使用してチャネルを作成します。ここで、サービス名は helloworld
です。
ManagedChannelBuilder.forTarget("xds:///helloworld[:PORT_NUMBER]")
ブートストラップ ファイルを作成して構成する
xds
リゾルバ スキームは、gRPC アプリケーションに Cloud Service Mesh に接続してターゲット サービスの構成情報を取得するように指示します。そのため、次のことを行います。
- 次のサンプルで示すように、ブートストラップ ファイルを作成します。このファイルは、xDS サーバー(Cloud Service Mesh)に接続して特定のサービスの構成を取得するように、gRPC に指示します。
GRPC_XDS_BOOTSTRAP
という名前の環境変数を定義します。環境変数の値にブートストラップ ファイル名を設定します。
セットアップ手順には、ブートストラップ ファイルの生成例が記載されています。利便性を高めるために、最新バージョンの Cloud Service Mesh gRPC ブートストラップ ジェネレータを使用できます。
Cloud Service Mesh への接続に必要な情報を含むブートストラップ ファイルが、アプリケーションと一緒に含まれている必要があります。ブートストラップ ファイルのサンプルは、次のようになります。
{ "xds_servers": [ { "server_uri": "trafficdirector.googleapis.com:443", "channel_creds": [ { "type": "google_default" } ], "server_features": ["xds_v3"] } ], "node": { "id": "projects/123456789012/networks/default/nodes/b7f9c818-fb46-43ca-8662-d3bdbcf7ec18", "metadata": { "TRAFFICDIRECTOR_NETWORK_NAME": "default" }, "locality": { "zone": "us-central1-a" } } }
次の表で、ブートストラップ ファイルのフィールドを説明します。
フィールド | 値と説明 |
---|---|
xds_servers |
xDS サーバーのリスト。gRPC はリスト内の最初のもののみを使用します。 |
server_uri |
少なくとも 1 つ指定してください。gRPC は、xds_servers のリストで最初の xDS サーバーにのみ接続を試みます。デフォルト値は trafficdirector.googleapis.com:443 . です。 |
channel_creds |
xDS サーバーで使用する認証情報。 |
type |
値 google_default を使用します。認証情報を取得する方法の詳細については、認証のスタートガイドをご覧ください。 |
server_features |
サーバーでサポートされている機能(xDS v3 のサポートなど)のリスト。デフォルト値は空です。 |
node |
xDS サーバーに接続しているクライアントに関する情報。 |
id |
projects/PROJECT_NUMBER/networks/NETWORK_NAME/nodes/ID
|
metadata |
xDS サーバーに固有の情報。 |
TRAFFICDIRECTOR_MESH_NAME |
フィールドが空であるか、指定されていない場合、値は default に設定されます。 |
locality |
gRPC クライアントが実行されている Google Cloud ゾーン。 |
設定プロセスを続行する
このドキュメントで説明している前提条件について作業が完了したら、サービス ルーティング API を使用して Cloud Service Mesh を構成する場合は、次のいずれかのドキュメントに進んでください。
Mesh
リソースを使用してプロキシレス gRPC サービスを設定する- HTTP サービスを使用して Envoy プロキシを設定する
- Ingress ゲートウェイを設定する
TCPRoute
リソースを使用して TCP サービスを設定するMesh
リソースとRoute
リソースを使用してプロジェクト間の参照を設定する- ゲートウェイ TLS ルーティングを設定する