ポート マッピング サービスを作成する

このページでは、サービス プロデューサーが Private Service Connect ポート マッピングを使用するサービスを公開する方法について説明します。

Private Service Connect ポート マッピングを使用すると、コンシューマー仮想マシン(VM)インスタンスは、1 つの Private Service Connect エンドポイントを介して、特定のプロデューサー VM の特定のサービスポートと非公開で通信できます。

始める前に

必要なロール

Private Service Connect ポート マッピングを使用してサービスを公開するために必要な権限を取得するには、プロデューサー プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

ポート マッピング サービスを作成して公開する

ポート マッピング サービスは、内部パススルー ネットワーク ロードバランサと同様ですが、トラフィックはロード バランシングされません。ポート マッピング サービスを作成して公開するには、次の操作を行います。

  • ポート マッピング NEG を作成する
  • ポート マッピング NEG にネットワーク エンドポイントを追加する
  • ポート マッピング サービスを作成する
  • ポート マッピング サービスを公開する

ポート マッピング NEG を作成する

ポート マッピング ネットワーク NEG は、ネットワーク エンドポイント タイプが GCE_VM_IP_PORTMAP のリージョン NEG です。ポート マッピング NEG のタイプは、作成後に変更できません。

ポート マッピング NEG を作成するときに、サブネットを選択します。ポート マッピング NEG に関連付けるネットワーク エンドポイントには、このサブネットのプライマリ ネットワーク インターフェースが必要です。

コンソール

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. [ネットワーク エンドポイント グループを作成] をクリックします。

  3. 名前を入力します。

  4. [ネットワーク エンドポイント グループの種類] をクリックし、[ポート マッピング NEG(リージョン)] を選択します。

  5. リージョンを選択します。

  6. ネットワークを選択します。

  7. サブネットワークを選択します。

  8. [作成] をクリックします。

gcloud

network-endpoints-groups create コマンドを使用します。

gcloud beta compute network-endpoint-groups create NEG \
    --region=REGION \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-endpoint-type=GCE_VM_IP_PORTMAP

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

  • NEG: ポート マッピング NEG の名前
  • REGION: ポート マッピング NEG のリージョン
  • NETWORK: ポート マッピング NEG の VPC ネットワーク
  • SUBNET: ポート マッピング NEG のサブネット

API

POST リクエストを regionNetworkEndpointGroups.insert メソッドに送信します。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG",
  "networkEndpointType": "GCE_VM_IP_PORTMAP",
  "network": "projects/PROJECT_ID/global/networks/NETWORK",
  "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
}

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

  • PROJECT_ID: ポート マッピング NEG のプロジェクト ID
  • REGION: ポート マッピング NEG のリージョン
  • NEG: ポート マッピング NEG の名前
  • NETWORK: ポート マッピング NEG の VPC ネットワーク
  • SUBNET: ポート マッピング NEG のサブネット

ポート マッピング NEG にネットワーク エンドポイントを追加する

ポート マッピングを含む 1 つ以上のネットワーク エンドポイントを作成し、ポート マッピング NEG に接続します。

ポート マッピング NEG のネットワーク エンドポイントはゾーンであり、次の要件を満たす必要があります。

  • 各ネットワーク エンドポイントは、ポート マッピング NEG と同じサブネットにプライマリ ネットワーク インターフェースを持つ Compute Engine VM を参照します。
  • 各ネットワーク エンドポイントは、一意のクライアント宛先ポートを参照します。
  • 各ネットワーク エンドポイントは、サービスポートと VM の一意の組み合わせを参照する必要があります。

コンソール

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. 更新するポート マッピング NEG の名前をクリックします。

  3. [ネットワーク エンドポイントを追加] をクリックします。

  4. [VM インスタンス] をクリックして、VM を選択します。

  5. [VM ポート 1] をクリックし、サービスポートを入力します。

  6. [クライアント ポート 1] をクリックし、クライアントの宛先ポートを入力します。

  7. 追加するネットワーク エンドポイントごとに、[ネットワーク エンドポイントを追加] をクリックして、ネットワーク エンドポイントの詳細を入力します。

  8. [作成] をクリックします。

gcloud

network-endpoint-groups update コマンドを使用します。接続するネットワーク エンドポイントごとに --add-endpoint フラグを指定します。

gcloud beta compute network-endpoint-groups update NEG \
    --region=REGION \
    --add-endpoint=client-destination-port=CLIENT_DESTINATION_PORT_1,instance=projects/PROJECT_ID/zones/ZONE_1/instances/VM_1_NAME,port=VM_1_PORT \
    --add-endpoint=client-destination-port=CLIENT_DESTINATION_PORT_2,instance=projects/PROJECT_ID/zones/ZONE_2/instances/VM_2_NAME,port=VM_2_PORT

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

  • NEG: ポート マッピング NEG の名前
  • REGION: ポート マッピング NEG のリージョン
  • CLIENT_DESTINATION_PORT_1: 最初のネットワーク エンドポイントのクライアント宛先ポート
  • PROJECT_ID: プロデューサー プロジェクトのプロジェクト ID
  • ZONE_1: 最初のネットワーク エンドポイントのゾーン
  • VM_1_NAME: 最初のネットワーク エンドポイントの宛先 VM の名前
  • VM_1_PORT: 最初のネットワーク エンドポイントのサービスポート
  • CLIENT_DESTINATION_PORT_2: 2 番目のネットワーク エンドポイントのクライアント宛先ポート
  • ZONE_2: 2 番目のネットワーク エンドポイントのゾーン
  • VM_2_NAME: 2 番目のネットワーク エンドポイントの宛先 VM の名前
  • VM_2_PORT: 2 番目のネットワーク エンドポイントのサービスポート

API

POST リクエストを regionNetworkEndpointGroups.attachNetworkEndpoints メソッドに送信します。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG/attachNetworkEndpoints
{
  "networkEndpoints": [
    {
      "clientDestinationPort":CLIENT_DESTINATION_PORT_1,
      "instance": "projects/PROJECT_ID/zones/ZONE_1/instances/VM_1_NAME",
      "port": SERVICE_PORT_1
    },
    {
      "clientDestinationPort": CLIENT_DESTINATION_PORT_2,
      "instance": "projects/PROJECT_ID/zones/ZONE_2/instances/VM_2_NAME",
      "port": SERVICE_PORT_2
    }
  ]
}

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

  • PROJECT_ID: プロデューサー プロジェクトのプロジェクト ID
  • REGION: ポート マッピング NEG のリージョン
  • NEG: ポート マッピング NEG の名前
  • CLIENT_DESTINATION_PORT_1: 最初のネットワーク エンドポイントのクライアント宛先ポート
  • ZONE_1: 最初のネットワーク エンドポイントのゾーン
  • VM_1_NAME: 最初のネットワーク エンドポイントの宛先 VM の名前
  • SERVICE_PORT_1: 最初のネットワーク エンドポイントのサービスポート
  • CLIENT_DESTINATION_PORT_2: 2 番目のネットワーク エンドポイントのクライアント宛先ポート
  • ZONE_2: 2 番目のネットワーク エンドポイントのゾーン
  • VM_2_NAME: 2 番目のネットワーク エンドポイントの宛先 VM の名前
  • SERVICE_PORT_2: 2 番目のネットワーク エンドポイントのサービスポート

ポート マッピング サービスを作成する

ポート マッピング サービスを作成するには、次の操作を行います。

NEG を追加した後、バックエンド サービスに関連付けられているポート マッピング NEG を変更することはできません。ただし、ポート マッピング NEG のネットワーク エンドポイントを更新することはできます。

転送ルールの接続は、作成後に更新できません。別のバックエンド サービスに接続する必要がある場合は、転送ルールを削除してから、新しいルールを作成します。

コンソール

構成を開始する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
  4. [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
  5. [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
  6. [構成] をクリックします。

基本構成

  1. ロードバランサ名を入力します。
  2. リージョンを選択します。
  3. ネットワークを選択します。

バックエンドの構成

  1. [バックエンド タイプ] で [ポート マッピングのネットワーク エンドポイント グループ] を選択します。
  2. ポート マッピングのネットワーク エンドポイント グループを選択します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. 省略可: 名前を入力します。
  3. 省略可: 説明を入力します。
  4. プロトコルを選択します。
  5. サブネットワークを選択します。
  6. [完了] をクリックします。
  7. [作成] をクリックします。

gcloud

  1. バックエンド サービスを作成するには、backend-services create コマンドを使用します。

    gcloud beta compute backend-services create SERVICE \
        --load-balancing-scheme=internal \
        --region=REGION \
        --network=NETWORK
    

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

    • SERVICE: バックエンド サービスの名前
    • REGION: バックエンド サービスのリージョン
    • NETWORK: バックエンド サービスのプロデューサー VPC ネットワーク
  2. ポート マッピング NEG をバックエンド サービスに追加するには、backend-services add-backend コマンドを使用します。

    1 つのバックエンド サービスに複数のポート マッピング NEG を追加することはできません。

    gcloud beta compute backend-services add-backend SERVICE \
        --network-endpoint-group=NEG \
        --network-endpoint-group-region=REGION
    

    NEG は、ポート マッピング NEG の名前に置き換えます。

  3. ポート マッピング サービスの転送ルールを作成するには、forwarding-rules create コマンドを使用します。

    すべてのクライアント宛先ポートでトラフィックを転送するように転送ルールを構成する必要があります。

    gcloud beta compute forwarding-rules create RULE \
        --load-balancing-scheme=INTERNAL \
        --ip-protocol=PROTOCOL \
        --network=NETWORK \
        --subnet=SUBNET \
        --address=IP_ADDRESS \
        --ports=ALL \
        --region=REGION \
        --backend-service=SERVICE
    

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

    • RULE: 転送ルールの名前
    • PROTOCOL: 転送ルールのプロトコル。TCP または UDP のいずれか。
    • SUBNET: プロデューサー サブネット。ポート マッピング NEG に関連付けられているサブネットと同じサブネットにする必要があります。
    • IP_ADDRESS: 転送ルールの IP アドレス。これは、プロデューサー サブネットの IP アドレス範囲から取得する必要があります。

API

  1. バックエンド サービスを作成するには、regionBackendServices.insert メソッドPOST リクエストを送信します。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/backendServices
    {
      "name": "SERVICE",
      "loadBalancingScheme": "INTERNAL",
      "network": "projects/PROJECT_ID/global/networks/NETWORK"
    }
    

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

    • PROJECT_ID: バックエンド サービスのプロジェクトの ID
    • REGION: バックエンド サービスのリージョン
    • SERVICE: バックエンド サービスの名前
    • NETWORK: プロデューサー VPC ネットワーク
  2. ポート マッピング NEG をバックエンド サービスに追加するには、regionBackendServices.patch メソッドPATCH リクエストを送信します。

    1 つのバックエンド サービスに複数のポート マッピング NEG を追加することはできません。

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/backendServices/SERVICE
    {
      "backends": [
        {
          "group": "https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG"
        }
      ]
    }
    

    NEG は、ポート マッピング NEG の名前に置き換えます。

  3. ポート マッピング サービスの転送ルールを作成するには、forwardingRules.insert メソッドPOST リクエストを送信します。

    すべてのクライアント宛先ポートでトラフィックを転送するように転送ルールを構成する必要があります。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID>/regions/REGION/forwardingRules
    {
      "name": "RULE",
      "loadBalancingScheme": "INTERNAL",
      "IPProtocol": "PROTOCOL",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET",
      "IPAddress": "IP_ADDRESS",
      "allPorts": true,
      "backendService": "projects/PROJECT_ID/regions/REGION/backendServices/SERVICE"
    }
    

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

    • RULE: 転送ルールの名前
    • PROTOCOL: 転送ルールのプロトコル。TCP または UDP のいずれか。
    • SUBNET: プロデューサー サブネット。ポート マッピング NEG に関連付けられているサブネットと同じサブネットにする必要があります。
    • IP_ADDRESS: 転送ルールの IP アドレス。これは、プロデューサー サブネットの IP アドレス範囲から取得する必要があります。

ポート マッピング サービスを公開する

ポート マッピング サービスをコンシューマーが利用できるようにするには、サービス アタッチメントを作成してサービスを公開します。サービス アタッチメントを作成するときに、ポート マッピング サービスに関連付けられている転送ルールを指定します。

次のステップ