プロキシレス gRPC サービスを使用した Traffic Director の設定の準備

このガイドでは、プロキシレス gRPC アプリケーションを使用して Traffic Director を構成するための準備手順について説明します。

始める前に

Traffic Director の一般的なコンセプトについて十分に理解します。次のドキュメントをお読みください。

これらのドキュメントでは、プロキシレス gRPC アプリケーションで Traffic Director を使用する方法の概要が説明されています。

一般的な準備

最初に、次のセクションで説明するタスクを実行して環境を準備します。

課金を有効にする

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

必要な IAM 権限の付与

Traffic Director を構成するには、VM インスタンスを作成し、ネットワークを変更するために十分な権限が必要です。Traffic Director を有効にするプロジェクトのプロジェクト オーナーまたは編集者のロールを持っている場合は、適切な権限が自動的に付与されています。

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

タスク 必要なロール
サービス アカウントの IAM ポリシーの設定 サービス アカウント管理者
グローバル転送ルールのリソースの取得 Compute ネットワーク閲覧者
Traffic Director の有効化 Service Usage 管理者
ネットワーク、サブネット、負荷分散コンポーネントの作成 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
インスタンスの作成 Compute インスタンス管理者

Compute Engine VM には https://www.googleapis.com/auth/cloud-platform スコープも必要です。

Traffic Director API を有効にする

Console

  1. Cloud Console で、プロジェクトの [API とサービス] に移動します。
    [API ライブラリ] ページに移動
  2. Traffic Director API を検索するには、検索フィールドを使用します。Traffic Director API が表示されない場合、Traffic Director API を有効にするために必要な権限がないことを示しています。
  3. Traffic Director API をクリックします。
  4. API 情報を表示するページで、[有効にする] をクリックします。

gcloud

gcloud services enable trafficdirector.googleapis.com

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

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

Compute Engine VM の場合、xDS クライアントは、VM に割り当てられたサービス アカウントを使用します。

xDS クライアントが使用するサービス アカウントには、compute.globalForwardingRules.get プロジェクト レベルの IAM 権限が必要です。この権限は、サービス アカウントにcompute.networkViewer ロールを割り当てることでも付与できます。

Console

  1. Cloud Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

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

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

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

  5. [Compute Engine] > [Compute ネットワーク閲覧者] のロールを選択します。

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

gcloud

$ {SERVICE_ACCOUNT_EMAIL} 変数を正しい値に置き換えます。

PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding ${PROJECT} \
   --member serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
   --role roles/compute.networkViewer

次に、プロキシレス gRPC アプリケーションをメッシュに設定するために、以下のすべての手順を行ってください。

  1. gRPC クライアントに最新のパッチを適用して最新バージョンの gRPC に更新します。
  2. チャネルを作成し、Traffic Director ブートストラップ ファイルを指定する際、クライアントの gRPC 名前解決スキームを更新します。
  3. Traffic Director と Cloud Load Balancing のリソースを構成します。

このガイドでは、最初の 2 つの手順を完了するための情報を提供します。ステップ 3 の構成プロセスは、デプロイで Compute Engine VM を使用するか、Google Kubernetes Engine NEG を使用するかによって異なります。

サポートされている gRPC のバージョンと言語

gRPC はオープンソース プロジェクトです。リリースのサポートについては、こちらをご覧ください。セキュリティ上の既知の脆弱性を軽減するために、最新バージョンの gRPC を使用することを強くおすすめします。これにより、Traffic Director でサポートされている最新機能にアプリケーションでアクセスできるようになります。gRPC のさまざまな実装とバージョンでサポートされているサービス メッシュ機能の一覧については、こちらをご覧ください。Traffic Director とプロキシレス gRPC サービスでサポートされている gRPC の言語と機能の一覧については、こちらをご覧ください。

Traffic Director について、gRPC の現在のバージョンおよびサポート対象のバージョンとの互換性を維持し、Google Cloud Platform の利用規約に基づいて更新期限を経過してから 1 年未満の gRPC バージョンとの互換性を維持するよう努めています。

gRPC クライアントの更新

まず、アプリケーションの gRPC ライブラリを、必要な機能をサポートするバージョンに更新する必要があります。詳しくは、前のセクションをご覧ください。gRPC アプリケーションの依存関係として xDS の名前リゾルバを追加します。Java と Go の言語ごとの要件を以下に示します。他の言語には追加要件はありません。

Java の要件

Java で Gradle を使用している場合は、スナップショット リポジトリと grpc-xds 依存関係を build.gradle ファイルに追加します。以下に示すバージョンを gRPC の最新バージョンに置き換えます。

repositories {
    mavenLocal()
}
dependencies {
  runtimeOnly 'io.grpc:grpc-xds:1.30.0-SNAPSHOT'
}

Maven を使用している場合は、pom.xml の <dependencies> セクションに以下のコードを追加します。以下に示すバージョンを gRPC の最新バージョンに置き換えます。

    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-xds</artifactId>
      <version>1.30.0-SNAPSHOT</version>
      <scope>runtime</scope>
    </dependency>

Go の要件

Go を使用している場合は、xds Go パッケージをインポートする必要があります。

gRPC 名前リゾルバを xds にする

gRPC アプリケーションを設定または変更し、ターゲット URI の xds 名前解決スキームを使用します。DNS やその他の解決スキームは使用しません。このために、gRPC チャネルを作成する際は、ターゲット名に接頭辞 xds:/// を使用します。gRPC クライアントの負荷分散はチャネル単位で行われます。

Traffic Director 構成のターゲット URI で使用されるサービス名も含まれるようにすることも必要です。たとえば Java では、この構造を使用してチャネルを作成します。その際のサービス名は helloworld です。

ManagedChannelBuilder.forTarget("xds:///helloworld[:PORT_NUMBER]")

ブートストラップ ファイル

xds リゾルバ スキームは、gRPC アプリケーションに Traffic Director に接続してターゲット サービスの構成情報を取得するように指示します。そのため、次のことを行います。

  • 下に示すように、ブートストラップ ファイルを作成します。このファイルは、xDS サーバー(Traffic Director)に接続して特定のサービスの構成を取得するように、gRPC に指示します。
  • GRPC_XDS_BOOTSTRAP という名前の環境変数を定義します。環境変数の値にブートストラップ ファイル名を設定します。

セットアップ手順には、ブートストラップ ファイルの生成例が記載されています。

Traffic Director への接続に必要な情報を含むブートストラップ ファイルが、アプリケーションと一緒に含まれている必要があります。ブートストラップ ファイルのサンプルは、次のようになります。

{
  "xds_servers": [
    {
      "server_uri": "trafficdirector.googleapis.com:443",
      "channel_creds": [
        {
          "type": "google_default"
        }
      ]
    }
  ],
  "node": {
    "id": "b7f9c818-fb46-43ca-8662-d3bdbcf7ec18~10.0.0.1",
    "metadata": {
      "TRAFFICDIRECTOR_GCP_PROJECT_NUMBER": "123456789012",
      "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 を使用します。認証情報の取得方法についての詳細は、認証のスタートガイドをご覧ください。
node xDS サーバーに接続しているクライアントに関する情報。
id id フィールドに一意の文字列を入力します。これにより、Traffic Director に接続する gRPC クライアントを特定できます。
metadata xDS サーバー固有の情報。
TRAFFICDIRECTOR_GCP_PROJECT_NUMBER Traffic Director が実行されているプロジェクト番号。
TRAFFICDIRECTOR_NETWORK_NAME フィールドが空であるか、指定されていない場合、値は default に設定されます。
locality gRPC クライアントが走行している GCP ゾーン

次のステップ

このドキュメントで説明している準備が完了したら、次のいずれかのドキュメントの手順に進んでください。