バックエンド経由で公開サービスにアクセスする

このガイドでは、Private Service Connect バックエンドを使用してグローバル外部アプリケーション ロードバランサを構成し、Private Service Connect を使用して公開されたサービスにアクセスする方法について説明します。

図 1.グローバル外部アプリケーション ロードバランサに基づくバックエンドを使用すると、インターネットにアクセスできるサービス ユーザーは、サービス プロデューサーの VPC ネットワーク内のサービスにトラフィックを送信できます(クリックして拡大)。

詳細については、Private Service Connect バックエンドについてをご覧ください。

ロール

このガイドで説明するタスクの実行に必要な権限は、Compute ロードバランサ管理者のロールroles/compute.loadBalancerAdmin)に含まれています。

始める前に

  • 独自のサービスを公開する場合は、Private Service Connect を使用してサービスを公開するをご覧ください。

  • サードパーティが公開しているサービスを接続する場合は、サービス プロデューサーに以下の情報を問い合わせてください。

    • 接続するサービスのサービス アタッチメントの URI。このサービス アタッチメントの形式は projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME のようになります。

    • リクエストの送信に使用する DNS 名の要件。URL マップ構成または DNS 構成で特定の DNS 名が必要になる場合があります。

ネットワーク エンドポイント グループの作成

アクセスする公開サービスのサービス アタッチメントを参照する Private Service Connect NEG を作成します。公開サービスが複数の異なるリージョンにデプロイされている場合は、サービス アタッチメントごとに 1 つの NEG を作成します。

各 Private Service Connect NEG は /32 IP アドレスを使用するため、ロードバランサはそのアドレスと通信できます。

コンソール

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

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

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

  3. ネットワーク エンドポイント グループの名前を入力します。

  4. [ネットワーク エンドポイント グループの種類] で [ネットワーク エンドポイント グループ(Private Service Connect)] を選択します。

  5. ターゲット タイプとして [公開済みのサービス] を選択します。

  6. [ターゲット サービス] に、サービス アタッチメントの URI を入力します。

  7. ネットワーク エンドポイント グループを作成するネットワークサブネットを選択します。

    サブネットは、公開済みのサービスと同じリージョンに存在する必要があります。

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

gcloud

gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION \
    --network=NETWORK \
    --subnet=SUBNET

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

  • NEG_NAME: ネットワーク エンドポイント グループの名前。

  • TARGET_SERVICE: 接続するサービス アタッチメント。

  • REGION: ネットワーク エンドポイント グループを作成するリージョン。リージョンは、ターゲット サービスと同じリージョンにする必要があります。

  • NETWORK: ネットワーク エンドポイント グループを作成するネットワーク。省略すると、デフォルト ネットワークが使用されます。

  • SUBNET: ネットワーク エンドポイント グループを作成するサブネット。サブネットは、ターゲット サービスと同じリージョンに存在する必要があります。ネットワークを指定する場合は、サブネットを指定する必要があります。ネットワークとサブネットの両方を省略すると、デフォルト ネットワークが使用され、指定された REGION のデフォルトのサブネットが使用されます。

ロードバランサに外部 IP アドレスを予約する

ロードバランサに外部 IP アドレスを予約するには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで、[IP アドレス] ページに移動します。

    [IP アドレス] に移動

  2. IPv4 アドレスを予約するには、[静的アドレスを予約] をクリックします。

  3. IP アドレス リソースに名前を割り当てます。

  4. ネットワーク階層を [プレミアム] に設定します。

  5. [IP バージョン] を IPv4 に設定します。

  6. [タイプ] で [グローバル] をオンにします。

  7. [予約] をクリックします。

gcloud

  1. ロードバランサにグローバル外部 IPv4 アドレスを予約します。

    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global
    

    ADDRESS_NAME は、IP アドレス リソースの名前に置き換えます。

  2. 予約済み IP アドレスを表示するには、次のコマンドを実行します。

    gcloud compute addresses describe ADDRESS_NAME \
      --format="get(address)" --global
    

SSL 証明書リソースを作成する

HTTPS ロードバランサを作成するには、ロードバランサのフロントエンドに SSL 証明書リソースを追加する必要があります。Google マネージド SSL 証明書またはセルフマネージド SSL 証明書を使用して SSL 証明書リソースを作成します。

  • Google マネージド証明書。Google Cloud が自動的に取得、管理、更新する Google マネージド証明書をおすすめします。Google マネージド証明書を作成するには、ドメインとそのドメインの DNS レコードを用意し、証明書をプロビジョニングする必要があります。ドメインがない場合は、Google Domains から取得できます。詳しくは、Google Domains スタートガイドをご覧ください。また、前の手順で作成したロードバランサの IP アドレスを指すようにドメインの DNS A レコードを更新する必要があります。詳しい手順については、Google マネージド証明書の使用をご覧ください。

  • セルフマネージド証明書。セルフマネージド SSL 証明書。ご自分で取得、プロビジョニング、更新する証明書です。セルフマネージド証明書は、認証局によって署名されるか、自己署名されます。認証局によって署名されている場合はドメインが必要です。ドメインがない場合は、Google Domains から取得できます。詳しくは、Google Domains スタートガイドをご覧ください。また、前の手順で作成したロードバランサの IP アドレスを指すようにドメインの DNS A レコードを更新する必要があります。詳しい手順については、セルフマネージド SSL 証明書を使用するをご覧ください。

    この段階でドメインを設定したくない場合は、テスト用に自己署名 SSL 証明書を使用できます。

以下の手順は、SSL 証明書リソースがすでに作成されていることを前提としています。

ロードバランサの構成

高度なトラフィック管理機能(EXTERNAL_MANAGED に設定されたロード バランシング スキーム)を使用して、マネージド サービスに接続するグローバル外部アプリケーション ロードバランサを構成します。

複数のリージョンにデプロイされている公開サービスに接続し、複数の Private Service Connect NEG を作成して各サービス アタッチメントに接続する場合は、すべての NEG をバックエンド サービスに追加できます。

Private Service Connect NEG はリージョナルですが、この構成の他のロード バランシング コンポーネントはグローバルです。

コンソール

構成を開始する

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
  7. [構成] をクリックします。

基本構成

  1. ロードバランサ名を入力します。
  2. ウィンドウを開いたままにして続行します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. [フロントエンド IP とポートの追加] をクリックします。
  3. ロードバランサの名前を入力します。
  4. [プロトコル] フィールドで、[HTTPS(HTTP/2 を含む)] を選択します。
  5. HTTPS トラフィックを許可するように、[ポート] が 443 に設定されていることを確認します。
  6. [IP アドレス] で、予約した IP アドレスを選択します。

  7. [証明書] リストをクリックし、作成した証明書を選択します。

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

  9. [完了] をクリックします。

バックエンドの構成

Private Service Connect ネットワーク エンドポイント グループは、ロードバランサのバックエンドの一種です。同じマネージド サービスのすべての Private Service Connect NEG をバックエンド サービスに追加します。

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスとバックエンド バケット] リストをクリックし、[バックエンド サービスを作成] をクリックします。
  3. バックエンド サービスの名前を入力します。
  4. [バックエンド タイプ] を Private Service Connect ネットワーク エンドポイント グループに設定します。
  5. [バックエンド] セクションで [Private Service Connect ネットワーク エンドポイント グループ] リストをクリックし、作成した Private Service Connect NEG を選択します。[完了] をクリックします。
  6. 複数の Private Service Connect NEG を作成した場合は、[バックエンドを追加] をクリックして別の NEG を選択します。

    このマネージド サービスのすべての NEG がバックエンド サービスに追加されるまで、この手順を繰り返します。

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

ルーティング ルール

この構成にはバックエンド サービスが 1 つしか含まれていないため、デフォルトのルーティング ルールで十分です。このセクションで変更する必要はありません。

確認と完了

  1. 構成を確認するには、[確認と完了] をクリックします。
  2. [作成] をクリックします。

gcloud

  1. 接続するマネージド サービスのバックエンド サービスを作成します。

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --global
    

    BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。

  2. ターゲット サービスを指す Private Service Connect NEG を追加します。

    同じサービスの複数のリージョンに複数の NEG を作成している場合は、この手順を繰り返して、すべての NEG をバックエンド サービスに追加します。

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --network-endpoint-group-region=REGION \
      --global
    

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

    • BACKEND_SERVICE_NAME: バックエンド サービスの名前。
    • NEG_NAME: ネットワーク エンドポイント グループの名前。
    • REGION: ネットワーク エンドポイント グループのリージョン。
  3. ロードバランサの URL マップを作成します。

    URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。作成したバックエンド サービスをデフォルトのバックエンド サービスとして構成します。

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=BACKEND_SERVICE_NAME \
      --global
    

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

    • URL_MAP_NAME: URL マップの名前。

    • BACKEND_SERVICE_NAME: ロードバランサのデフォルト バックエンド サービスの名前。このデフォルトは、指定されたホスト名に一致するホストルールがない場合に使用されます。

  4. ターゲット HTTPS プロキシを作成します。

    作成した SSL 証明書リソースを使用して、ターゲット HTTPS プロキシを作成します。

    gcloud compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --ssl-certificates=CERTIFICATE
    

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

    • PROXY_NAME: ターゲット HTTPS プロキシの名前。
    • URL_MAP_NAME: URL マップの名前。
    • CERTIFICATE: 証明書リソースの名前。
  5. 転送ルールを作成します。

    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global
    

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

    • FWD_RULE: 転送ルールの名前。

    • ADDRESS_NAME: 転送ルールに使用するために予約した IP アドレス リソース。

    • PROXY_NAME: ターゲット HTTPS プロキシの名前。

DNS レコードを構成する

DNS 名を使用して Private Service Connect バックエンドにアクセスする場合は、外部転送ルールごとに DNS 名を作成します。DNS レコードは、URL マップの名前に対応している必要があります。URL マップで名前が書き換えられる場合を除き、DNS レコードは、プロデューサー サービスが想定する名前にも対応している必要があります。

Cloud DNS を使用して DNS を管理している場合は、DNS レコードの追加をご覧ください。

構成を確認する

  1. VM インスタンスを作成します。

    gcloud compute instances create VM_NAME \
        --network=NETWORK \
        --image-project=debian-cloud --image-family=debian-11 \
        --zone=ZONE
    

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

    • VM_NAME: 仮想マシンの名前。

    • NETWORK: VM のネットワーク。

    • ZONE: VM のゾーン。

  2. VM に接続します。

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. curl を使用して、構成を確認します。このコマンドでは Host ヘッダーを設定し、ユーザー定義の IP アドレスを指定して DNS の解決をバイパスします。プロトコルでデフォルトのポートを使用している場合は、ポートを省略できます(HTTPS にポート 443 を使用する場合など)。

    -k フラグを使用して証明書の検証をスキップできます。自己署名証明書を使用してターゲット HTTPS プロキシを構成した場合、または証明書に署名した認証局の証明書が VM に存在しない場合は、検証のスキップが必要になることがあります。

    curl [-k] -s 'https://HOST:443/RESOURCE_URI' \
        -H 'Host: HOST' \
        --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

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

    • HOST: URL マップで構成されているホスト名。

    • RESOURCE_URI: 検証に使用するリソースの URI の残り。

    • FWD_RULE_IP_ADDRESS: 転送ルールに割り振られた IP アドレス。

トラブルシューティング

バックエンドの作成は成功するが、接続は確立されない

公開サービスのバックエンドが正常に作成されても接続が確立されない場合は、バックエンドの接続ステータスを確認します。接続ステータスが問題の解決手順を示している場合があります。