プロジェクト間の参照を設定する

一部のシナリオでは、サービス メッシュ構成に異なるプロジェクトのサービスが含まれています。たとえば、共有 VPC デプロイやピアリング VPC デプロイでは、各プロジェクト オーナーが独自のサービスセットを定義して、これらのサービスを他のすべてのプロジェクトで利用できるようにすることができます。

Mesh リソースを使用したクロス プロジェクト構成
Mesh リソースを使用したクロス プロジェクト構成(クリックして拡大)

この構成はクロス プロジェクト構成と呼ばれています。この構成では、異なるプロジェクトで定義されている複数のリソースが結合されて 1 つの構成を形成し、Envoy プロキシまたはプロキシレス gRPC クライアントに提供されます。

以下の手順では Mesh リソースと HTTPRoute リソースを使用していますが、Gateway リソース、GRPCRoute リソース、TCPRoute リソースにも適用できます。

Mesh リソースを構成する

Mesh リソースを管理するホスト プロジェクトとしてプロジェクトを指定します。このプロジェクトで Mesh リソースを作成、更新、削除する権限を持つサービス アカウントは、このプロジェクトの Mesh リソースに接続されているルーティング構成を制御できます。

  1. shared-mesh.yaml ファイルで、Mesh 仕様を作成します。

    name: shared-mesh
    interceptionPort: 15001
    
  2. このプロジェクトで Mesh リソースを定義します。

    gcloud network-services meshes import shared-mesh \
      --source=shared-mesh.yaml \
      --location=global
    
  3. サービス オーナーがこの Mesh にルートを接続する際に必要になるため、Mesh リソースの完全な URI をメモしておきます。

    /projects/[HOST_PROJECT_NUMBER]/locations/global/meshes/shared-mesh
    
  4. この Meshnetworkservices.meshes.use IAM 権限を、この Mesh にサービス情報を接続できるクロス プロジェクト サービス アカウントに付与します。

    gcloud projects add-iam-policy-binding [HOST_PROJECT_NUMBER]
      --member='[HTTP_ROUTE_SERVICE_OWNER_ACCOUNT]'
      --role='roles/compute.networkAdmin'
    

networkservices.meshes.use 権限を持つすべてのサービス オーナーは、この Mesh リソースにルーティング ルールを追加できます。

サービス プロジェクトでルーティングを設定する

各サービス オーナーは、サイドカー プロキシ構成ガイドの例と同様に、プロジェクトに 1 つ以上のバックエンド サービスと Route リソースを作成する必要があります。唯一の違いは、HTTPRouteGRPCRouteTCPRoute の各リソースの meshes フィールドに、ホスト プロジェクトの Mesh リソースの URI が必要なことです。

  1. 次のようにして、meshes フィールドに値を設定します。プロジェクト ID またはプロジェクト番号のいずれかを使用できます。

    echo "name: sharedvpc-http-route
    hostnames:
    - helloworld-gce
    meshes:
    - /projects/[HOST_PROJECT_NUMBER]/locations/global/meshes/shared-mesh
    rules:
    - action:
        destinations:
        - serviceName: \"url/of/the/service\"" | \
    gcloud network-services http-routes import sharedvpc-http-route \
        --source=- \
        --location=global
    

サービス プロジェクトでクライアント サービスを作成する

サービス プロジェクトにある Traffic Director クライアントを構成する場合、ブートストラップ構成で Mesh リソースが配置されているプロジェクト番号と Mesh 名を指定する必要があります。この要件は、Envoy プロキシプロキシレス gRPC デプロイの両方に適用されます。Envoy のデプロイでは、--service-proxy:project-number オプションを使用します。