ポート マッピング サービスを作成する
このページでは、サービス プロデューサーが Private Service Connect ポート マッピングを使用するサービスを公開する方法について説明します。
Private Service Connect ポート マッピングを使用すると、コンシューマー仮想マシン(VM)インスタンスは、1 つの Private Service Connect エンドポイントを介して、特定のプロデューサー VM の特定のサービスポートと非公開で通信できます。
始める前に
- プロジェクトで Compute Engine API を有効にする必要があります。
- ポート マッピング NEG に接続するネットワーク エンドポイントごとに VM を作成する必要があります。VM はすべて同じリージョンに存在する必要があります。
- 公開サービスについてをご覧ください。
- Private Service Connect のポート マッピングについてをご覧ください。
必要なロール
Private Service Connect ポート マッピングを使用してサービスを公開するために必要な権限を取得するには、プロデューサー プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。
-
Compute ロードバランサ管理者(
roles/compute.loadBalancerAdmin
) - Compute ネットワーク管理者(
roles/compute.networkAdmin
)
ロールの付与の詳細については、アクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
ポート マッピング サービスを作成して公開する
ポート マッピング サービスは、内部パススルー ネットワーク ロードバランサと同様ですが、トラフィックはロード バランシングされません。ポート マッピング サービスを作成して公開するには、次の操作を行います。
- ポート マッピング NEG を作成する
- ポート マッピング NEG にネットワーク エンドポイントを追加する
- ポート マッピング サービスを作成する
- ポート マッピング サービスを公開する
ポート マッピング NEG を作成する
ポート マッピング ネットワーク NEG は、ネットワーク エンドポイント タイプが GCE_VM_IP_PORTMAP
のリージョン NEG です。ポート マッピング NEG のタイプは、作成後に変更できません。
ポート マッピング NEG を作成するときに、サブネットを選択します。ポート マッピング NEG に関連付けるネットワーク エンドポイントには、このサブネットのプライマリ ネットワーク インターフェースが必要です。
コンソール
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
[ネットワーク エンドポイント グループを作成] をクリックします。
名前を入力します。
[ネットワーク エンドポイント グループの種類] をクリックし、[ポート マッピング NEG(リージョン)] を選択します。
リージョンを選択します。
ネットワークを選択します。
サブネットワークを選択します。
[作成] をクリックします。
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 のプロジェクト IDREGION
: ポート マッピング NEG のリージョンNEG
: ポート マッピング NEG の名前NETWORK
: ポート マッピング NEG の VPC ネットワークSUBNET
: ポート マッピング NEG のサブネット
ポート マッピング NEG にネットワーク エンドポイントを追加する
ポート マッピングを含む 1 つ以上のネットワーク エンドポイントを作成し、ポート マッピング NEG に接続します。
ポート マッピング NEG のネットワーク エンドポイントはゾーンであり、次の要件を満たす必要があります。
- 各ネットワーク エンドポイントは、ポート マッピング NEG と同じサブネットにプライマリ ネットワーク インターフェースを持つ Compute Engine VM を参照します。
- 各ネットワーク エンドポイントは、一意のクライアント宛先ポートを参照します。
各ネットワーク エンドポイントは、サービスポートと VM の一意の組み合わせを参照する必要があります。
コンソール
Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。
更新するポート マッピング NEG の名前をクリックします。
[ネットワーク エンドポイントを追加] をクリックします。
[VM インスタンス] をクリックして、VM を選択します。
[VM ポート 1] をクリックし、サービスポートを入力します。
[クライアント ポート 1] をクリックし、クライアントの宛先ポートを入力します。
追加するネットワーク エンドポイントごとに、[ネットワーク エンドポイントを追加] をクリックして、ネットワーク エンドポイントの詳細を入力します。
[作成] をクリックします。
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
: プロデューサー プロジェクトのプロジェクト IDZONE_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
: プロデューサー プロジェクトのプロジェクト IDREGION
: ポート マッピング 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 のネットワーク エンドポイントを更新することはできます。
転送ルールの接続は、作成後に更新できません。別のバックエンド サービスに接続する必要がある場合は、転送ルールを削除してから、新しいルールを作成します。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- ロードバランサ名を入力します。
- リージョンを選択します。
- ネットワークを選択します。
バックエンドの構成
- [バックエンド タイプ] で [ポート マッピングのネットワーク エンドポイント グループ] を選択します。
- ポート マッピングのネットワーク エンドポイント グループを選択します。
フロントエンドの構成
- [フロントエンドの構成] をクリックします。
- 省略可: 名前を入力します。
- 省略可: 説明を入力します。
- プロトコルを選択します。
- サブネットワークを選択します。
- [完了] をクリックします。
- [作成] をクリックします。
gcloud
バックエンド サービスを作成するには、
backend-services create
コマンドを使用します。gcloud beta compute backend-services create SERVICE \ --load-balancing-scheme=internal \ --region=REGION \ --network=NETWORK
次のように置き換えます。
SERVICE
: バックエンド サービスの名前REGION
: バックエンド サービスのリージョンNETWORK
: バックエンド サービスのプロデューサー VPC ネットワーク
ポート マッピング 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 の名前に置き換えます。ポート マッピング サービスの転送ルールを作成するには、
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
バックエンド サービスを作成するには、
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
: バックエンド サービスのプロジェクトの IDREGION
: バックエンド サービスのリージョンSERVICE
: バックエンド サービスの名前NETWORK
: プロデューサー VPC ネットワーク
ポート マッピング 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 の名前に置き換えます。ポート マッピング サービスの転送ルールを作成するには、
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 アドレス範囲から取得する必要があります。
ポート マッピング サービスを公開する
ポート マッピング サービスをコンシューマーが利用できるようにするには、サービス アタッチメントを作成してサービスを公開します。サービス アタッチメントを作成するときに、ポート マッピング サービスに関連付けられている転送ルールを指定します。