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

Traffic Director の設定にはいくつかのフェーズがあります。このドキュメントでは、最初のフェーズ(プロキシレス gRPC アプリケーションで Traffic Director を構成する準備)について説明します。このドキュメントは、以前の API とプレビュー版の新しいサービス ルーティング API のどちらを使用しているのかにかかわらず適用されます。その他のフェーズについては、このドキュメントの最後にある設定プロセスを続行するに記載されているプラットフォーム固有のガイドをご覧ください。

このガイドをお読みいただく前に、次のドキュメントを参照して、プロキシレス gRPC アプリケーションでの Traffic Director の使用に関する概要をよく理解してください。

前提条件

次のタスクを行って環境を準備します。

  1. 課金を有効にします。
  2. 必要な権限を付与します。
  3. プロジェクトで Traffic Director API を有効にします。
  4. Traffic Director API にアクセスするために十分な権限がサービス アカウントに付与されていることを確認します。

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

課金を有効にする

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

必要な IAM 権限を付与する

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

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

タスク 必要なロール
サービス アカウントの IAM ポリシーの設定。 サービス アカウント管理者
roles/iam.serviceAccountAdmin
Traffic Director の有効化。 Service Usage 管理者
roles/serviceusage.serviceUsageAdmin
ネットワーク、サブネット、負荷分散コンポーネントの作成。 Compute ネットワーク管理者
roles/compute.networkAdmin
ファイアウォール ルールの追加と削除。 Compute セキュリティ管理者
roles/compute.securityAdmin
インスタンスの作成。 Compute インスタンス管理者
roles/compute.instanceAdmin
GKE クラスタを作成、変更します(Pod を使用する場合)。 クラスタ管理者
roles/container.clusterAdmin
サービス アカウントへのアクセスを許可します。 サービス アカウント ユーザー
roles/iam.serviceAccountUser

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

xDS v3 では、Traffic Director gRPC クライアントが使用するサービス アカウントに 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

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

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

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

gRPC アプリケーションが使用する xDS プロトコルのバージョンに応じて、次の権限が必要です。xDS プロトコル バージョンは、ブートストラップ ファイルで指定されます。xDS v3 を使用するようにアプリケーションを構成することを強くおすすめします。xDS v2 を使用する既存のデプロイメントがある場合は、xDS v3 に移行することを強くおすすめします。

  • xDS v3 を使用する場合、gRPC アプリケーションが使用するサービス アカウントには trafficdirector.networks.reportMetrics および trafficdirector.networks.getConfigs 権限が必要です。IAM Traffic Director Client ロールroles/trafficdirector.client)を使用して、両方の権限をラップできます。

  • xDS v2 を使用する場合、gRPC アプリケーションが使用するサービス アカウントにはプロジェクト レベルの IAM 権限 compute.globalForwardingRules.get が必要です。この権限は、Compute ネットワーク閲覧者ロールroles/compute.networkViewer)をサービス アカウントに割り当てることで付与することもできます。

コンソール

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

    [IAM と管理] に移動

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

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

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

  5. [その他] > [Traffic Director 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: サービス アカウントに関連付けられたメール

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

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

このドキュメントでは、最初の 2 つのステップを完了するための情報を提供します。ステップ 3 で使用する構成プロセスは、デプロイで Compute Engine VM を使用するのか、GKE ネットワーク エンドポイント グループ(NEG)を使用するのかによって異なります。

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

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

Traffic Director は、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 クライアントの負荷分散はチャネル単位で行われます。

Traffic Director の構成でターゲット URI で使用されているサービス名を含めます。たとえば Java では、次の構造を使用してチャネルを作成します。ここで、サービス名は helloworld です。

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

ブートストラップ ファイルを作成して構成する

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

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

セットアップ手順には、ブートストラップ ファイルの生成例が記載されています。最新バージョンの Traffic Director gRPC ブートストラップ ジェネレータを使用することもできます。

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

{
  "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

id は、上の例に示すように次の形式にする必要があります。


projects/PROJECT_NUMBER/networks/NETWORK_NAME/nodes/ID

ID の値として一意の文字列を指定します。これにより、Traffic Director に接続する gRPC クライアントを特定できます。

metadata xDS サーバーに固有の情報。
TRAFFICDIRECTOR_NETWORK_NAME フィールドが空であるか、指定されていない場合、値は default に設定されます。
locality gRPC クライアントが実行されている Google Cloud ゾーン。

設定プロセスを続行する

このドキュメントで説明している前提条件についての作業が完了したら、次のいずれかのドキュメントに進んでください。