リージョン内部アプリケーション ロードバランサの HTTP から HTTPS へのリダイレクトを設定する

このトピックでは、URL マップ リダイレクトを使用して、すべての内部ロードバランサ リクエストを HTTP から HTTPS にリダイレクトする方法について説明します。このページの例では、既知のポート 80(HTTP の場合)と 443(HTTPS の場合)を使用しています。ただし、これらの特定のポート番号を使用する必要はありません。アプリケーション ロードバランサの転送ルールでは、1~65535 の単一ポートを参照できます。

HTTP から HTTPS へのリダイレクトを構成するには、HTTPS トラフィック用と HTTP トラフィック用の 2 つのロードバランサを作成する必要があります。各ロードバランサには独自の転送ルール、ターゲット プロキシ、URL マップがありますが、同じ IP アドレスを共有します。HTTP ロードバランサの場合、フロントエンドは HTTPS ロードバランサのバックエンドにトラフィックをリダイレクトするため、バックエンドを構成する必要はありません。

HTTP トラフィックを HTTPS にリダイレクトするには、次のことを行う必要があります。

  1. 予約済みの共有内部 IP アドレスを使用して、通常の内部 HTTPS ロードバランサを作成します。
  2. ロードバランサが機能していることを確認します。
  3. トラフィックを HTTPS ロードバランサにリダイレクトします。

    これを行うには、フロントエンドのみを持つ部分的な内部 HTTP ロードバランサを作成する必要があります。フロントエンドはリクエストを受信し、次のリソースを使用して HTTPS ロードバランサにリダイレクトします。

    • 手順 1 で作成した HTTPS ロードバランサと同じ予約済み内部 IP アドレスを持つ転送ルール
    • ターゲット HTTP プロキシ
    • HTTPS ロードバランサにトラフィックをリダイレクトする URL マップ

次の図に示すように、HTTPS ロードバランサは、想定される内部アプリケーション ロードバランサ コンポーネントを備えた通常のロードバランサです。

HTTP ロードバランサには、HTTPS ロードバランサと同じ IP アドレスが設定され、URL マップにリダイレクト命令が指定されています。

内部 HTTP から HTTPS へのリダイレクト構成
内部 HTTP から HTTPS へのリダイレクト構成(クリックして拡大)

内部 HTTPS ロードバランサを作成する

リージョン内部アプリケーション ロードバランサは、内部アプリケーション ロードバランサの設定の手順で設定します。

すでに機能しているリージョン内部アプリケーション ロードバランサがある場合は、転送ルールに予約済みの共有 IP アドレスがあることを確認してから、次のセクションの HTTPS ロードバランサにトラフィックをリダイレクトするをご覧ください。

クロスリージョン内部アプリケーション ロードバランサの場合は、VM インスタンス グループ バックエンドを使用したクロスリージョン内部アプリケーション ロードバランサを設定するの手順に沿って 2 つのロードバランサを作成し、HTTPS ロードバランサにトラフィックをリダイレクトするの説明に従って操作します。

HTTPS ロードバランサにトラフィックをリダイレクトする

前の手順で作成した HTTPS ロードバランサと同じ IP アドレスを持つ部分的な HTTP ロードバランサを作成します。部分的なロードバランサは、ポート 80 からポート 443 にトラフィックをリダイレクトします。

コンソール

構成を開始する

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

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

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

基本構成

  1. ロードバランサの名前に「l7-ilb-http-redirect」と入力します。
  2. [リージョン] で、us-west1 を選択します。
  3. [ネットワーク] で lb-network を選択します。

バックエンド サービスを構成する

  1. [バックエンドの構成] をクリックします。
  2. バックエンド サービスの選択メニューで、既存のバックエンド サービス l7-ilb-backend-service を選択します。
  3. [OK] をクリックします。

URL マップを構成する

  1. [ルーティング ルール] をクリックします。
  2. [モード] で、[詳細なホストとパスのルール] を選択します。
  3. [ホストとパスのルールを追加] をクリックします。
  4. [ホスト] を * に設定します。

  5. [パスマッチャー(一致、アクション、サービス)] に、次のコードを入力します。

    name: matcher1
    defaultUrlRedirect:
      httpsRedirect: true
      hostRedirect: IP_ADDRESS:443
      redirectResponseCode: PERMANENT_REDIRECT
    

  6. l7-ilb-backend-service が、ホストとパスが一致しなかった場合に使用される唯一のバックエンド サービスであることを確認します。

トラフィック管理の詳細については、内部アプリケーション ロードバランサのトラフィック管理を設定するをご覧ください。

HTTP 用にフロントエンドを構成する

  1. [フロントエンドの構成] をクリックします。
  2. 転送ルールの名前を l7-ilb-forwarding-rule に設定します。
  3. [プロトコル] を HTTP に設定します。
  4. [サブネットワーク] を [backend-subnet] に設定します。
  5. [ポート] を 80 に設定します。
  6. [IP アドレス] メニューで、HTTPS ロードバランサ転送ルール用に予約されている共有 IP アドレスを選択します。
  7. [完了] をクリックします。

構成を確認する

  1. [確認と完了] をクリックします。
  2. ロードバランサの構成を確認します。
  3. 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
  4. [作成] をクリックします。

gcloud

  1. トラフィック リダイレクト構成を含む YAML ファイルを作成して、新しい URL マップを作成します。IP_ADDRESS は、HTTPS ロードバランサ転送ルール用に予約された共有 IP アドレスに置き換えます。

    defaultService: regions/us-west1/backendServices/l7-ilb-backend-service
    kind: compute#urlMap
    name: l7-ilb-redirect-url-map
    hostRules:
    - hosts:
     - '*'
     pathMatcher: matcher1
    pathMatchers:
    - name: matcher1
     defaultUrlRedirect:
           hostRedirect: IP_ADDRESS:443
           redirectResponseCode: PERMANENT_REDIRECT
           httpsRedirect: True
    
  2. YAML ファイルを新しい URL マップにインポートします。

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. HTTP ロードバランサのターゲット プロキシを作成します。

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. 新しい転送ルールと共有 IP アドレスを作成します。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --network=lb-network \
       --subnet=backend-subnet \
       --address=IP_ADDRESS \
       --ports=80 \
       --region=us-west1 \
       --target-http-proxy=l7-ilb-http-proxy \
       --target-http-proxy-region=us-west1
    

トラフィックのリダイレクトをテストする

  1. クライアント VM に接続します。

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. ポート 80IP_ADDRESS に HTTP リクエストを送信し、トラフィック リダイレクトが行われるかどうか確認します。

    curl -L -k IP_ADDRESS
    
  3. サンプル出力を表示します。

    Page served from: l7-ilb-backend-w11t
    

    詳細を確認するには、-vvv を追加します。

    curl -L -k IP_ADDRESS -vvv
    

    • Rebuilt URL to: IP_ADDRESS/
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 80 (#0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / > < HTTP/1.1 308 Permanent Redirect < location: https://IP_ADDRESS:443/ < date: Fri, 07 Aug 2020 05:07:18 GMT < via: 1.1 google < content-length: 0 <
    • Curl_http_done: called premature == 0
    • Connection #0 to host IP_ADDRESS left intact
    • Issue another request to this URL: 'https://IP_ADDRESS:443/'
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 443 (#1)
    • ALPN, offering h2
    • ALPN, offering http/1.1
    • Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    • successfully set certificate verify locations:
    • CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs ... ...
    • SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    • ALPN, server accepted to use h2
    • Server certificate:
    • subject: O=Google TESTING; CN=test_cert_1
    • start date: Jan 1 00:00:00 2015 GMT
    • expire date: Jan 1 00:00:00 2025 GMT
    • issuer: O=Google TESTING; CN=Intermediate CA
    • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
    • Using HTTP2, server supports multi-use
    • Connection state changed (HTTP/2 confirmed)
    • Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    • Using Stream ID: 1 (easy handle 0x561a6b0e3ea0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / >
    • Connection state changed (MAX_CONCURRENT_STREAMS updated)! < HTTP/2 200 < date: Fri, 07 Aug 2020 05:07:18 GMT < server: Apache/2.4.25 (Debian) < last-modified: Thu, 06 Aug 2020 13:30:21 GMT < etag: "2c-5ac357d7a47ec" < accept-ranges: bytes < content-length: 44 < content-type: text/html < via: 1.1 google < Page served from: l7-ilb-backend-https-w11t
    • Curl_http_done: called premature == 0
    • Connection #1 to host IP_ADDRESS left intact

次のステップ