プライベート VM のインターネット接続の構築

Last reviewed 2023-05-15 UTC

このドキュメントでは、プライベート IP アドレスを持つ Compute Engine リソースを使用してインターネットに接続するための選択肢について説明します。このドキュメントは、Google Cloud サービスを作成するデベロッパーと、Google Cloud 環境のネットワーク管理者にとって有用です。

このチュートリアルは、VPC のデプロイ、Compute Engine、基本的な TCP/IP ネットワークについて十分に理解していることを前提としています。

目標

  • VPC の外部にあるプライベート VM 間の接続に使用できる選択肢を理解する。
  • SSH などの対話型サービスに適した TCP トンネル用に Identity-Aware Proxy(IAP)のインスタンスを作成する。
  • Cloud NAT インスタンスを作成して、VM からインターネットへの送信接続を可能にする。
  • インターネットから VM への受信接続をサポートするように HTTP ロードバランサを構成する。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを作成できます。このチュートリアルの合計費用は 1 日 US$5 未満と計算しています。

準備

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

はじめに

パブリック(外部)IP アドレスに比べて、プライベート IP アドレスには次のような利点があります。

  • 攻撃対象領域が縮小。VM から外部 IP アドレスを削除すると、攻撃者が VM に到達して潜在的な脆弱性を悪用することが困難になります。
  • 柔軟性が向上。ロードバランサや NAT サービスなどの抽象化レイヤを導入すると、静的な外部 IP アドレスと比べて、信頼性の高い柔軟なサービス配信が可能になります。

このソリューションでは、次の表にある 3 つのシナリオについて説明します。

インタラクティブ 取得 処理中
リモートホストが TCP の IAP を使用して VM への SSH 接続を開始します。

例: SSH または RDP を使用したリモート管理

VM が Cloud NAT を使用して、インターネット上の外部ホストへの接続を開始します。

例: OS のアップデート、外部 API

リモートホストが Google Cloud のグローバル ロードバランサを介して VM への接続を開始します。

例: アプリケーションのフロントエンド、WordPress

上のシナリオの 1 つのみに該当する環境もありますが、多くの環境ではこれらのシナリオがすべて必要であり、Google Cloud では完全にサポートされています。

以下のセクションでは、2 つのリージョンの 2 つの VM による HTTP 負荷分散サービスを備えたマルチリージョン環境について説明します。これらの VM は、送信通信に Cloud NAT を使用します。管理を行う場合は、IAP でトンネル化された SSH 経由で VM にアクセスできます。

次の図に、上の 3 つのユースケースとそれらに関連するコンポーネントの概要を示します。

ロードバランサを介したクライアントから VM インスタンスへのフロー、インスタンスからインターネットへアクセスするための Cloud NAT、クライアントからインスタンスへの直接 SSH アクセスを可能にする IAP を表すソリューションのアーキテクチャ。

VM インスタンスの作成

まず、合計で 4 つの仮想マシン(VM)インスタンスを作成します(リージョンごとに 2 つのインスタンスを作成します)。すべてのインスタンスに同じタグを付けます。このタグは、受信トラフィックがインスタンスに到達できるようにファイアウォール ルールで使用されます。

下図に示すとおり、作成した VM インスタンスとインスタンス グループが 2 つのゾーンに分散しています。

2 つのゾーンにある 4 つの VM インスタンスをハイライト表示したソリューションのアーキテクチャ。

各インスタンスに追加した起動スクリプトによって Apache がインストールされ、各インスタンスに一意のホームページが作成されます。

ここでは、Google Cloud コンソールと gcloud コマンドの両方を使用する場合の手順をそれぞれ説明します。gcloud コマンドを使用する最も簡単な方法は、Cloud Shell を使用することです。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。

  3. [名前] を www-1 に設定します。

  4. [ゾーン] を us-central1-b に設定します。

  5. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。

  6. [ネットワーキング] をクリックして、次の設定を行います。

    • HTTP トラフィックの場合は、[ネットワーク タグ] ボックスに「http-tag」と入力します。
    • [ネットワーク インターフェース] で [] をクリックします。
    • [外部 IP] で [なし] を選択します。
  7. [管理] をクリックし、[起動スクリプト] を次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 1</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. [作成] をクリックします。

  9. 同じ設定で www-2 を作成します。ただし、[起動スクリプト] は次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 2<h1></body></html>' | sudo tee /var/www/html/index.html
    
  10. 同じ設定で www-3 を作成します。ただし、[ゾーン] は europe-west1-b に設定し、[起動スクリプト] を次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 3</h1></body></html>' | sudo tee /var/www/html/index.html
    
  11. 同じ設定で www-4 を作成します。ただし、[ゾーン] は europe-west1-b に設定し、[起動スクリプト] を次のように設定します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 4</h1></body></html>' | sudo tee /var/www/html/index.html
    

gcloud

  1. Cloud Shell を開きます。

    Cloud Shell を開く

  2. 基本的な起動スクリプトを使用して、us-central1-bwww-1 という名前のインスタンスを作成します。

    gcloud compute instances create www-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-1</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  3. us-central1-bwww-2 という名前のインスタンスを作成します。

    gcloud compute instances create www-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-2</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  4. 今回は europe-west1-bwww-3 という名前のインスタンスを作成します。

    gcloud compute instances create www-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-3</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  5. 再度 europe-west1-bwww-4 という名前のインスタンスを作成します。

    gcloud compute instances create www-4 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-4</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    

Terraform

  1. Cloud Shell を開きます。

    Cloud Shell を開く

  2. GitHub からリポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/gce-public-connectivity-terraform

  3. 作業ディレクトリをリポジトリ ディレクトリに変更します。

    cd iap

  4. Terraform をインストールします。

  5. scripts/set_env_vars.sh ファイルの [YOUR-ORGANIZATION-NAME] は、Google Cloud の組織名に置き換えます。

  6. 環境変数を設定します。

    source scripts/set_env_vars.sh

  7. Terraform 構成を適用します。

    terraform apply

インスタンスを処理する IAP トンネルの構成

VM インスタンスにログインするには、SSH や RDP などのツールを使用してインスタンスに接続します。このチュートリアルで作成する構成では、インスタンスに直接接続することはできません。ただし、IAPTCP 転送を使用すると、こうした対話形式でリモート アクセスが可能になります。

このチュートリアルでは SSH を使用します。

このセクションでは、次の操作を行います。

  1. IAP トンネルを使用して Compute Engine インスタンスに接続する。
  2. IAM で IAP トンネリング権限を持つ 2 番目のユーザーを追加する。

次の図は、このセクションで構築するアーキテクチャを示しています。灰色の領域は、このチュートリアルの他のパートで説明します。

IAP によってクライアントとインスタンス間で SSH アクセスするためのアクセス権が与えられることを示すソリューションのアーキテクチャ。

IAP の制限事項

  • 帯域幅: IAP の TCP 転送機能は、データの一括転送を想定したものではありません。IAP は、このサービスを悪用していると考えられるユーザーに対してレート制限を設定できる権限を有しています。
  • 接続の長さ: IAP は、メンテナンスに必要な場合を除き、アクティブなセッションを切断することはありません。
  • プロトコル: TCP 用 IAP は、UDP をサポートしていません。

トンネリングを許可するファイアウォール ルールを作成する

SSH を使用してインスタンスに接続するには、ファイアウォールの適切なポートを開く必要があります。IAP 接続では、特定の IP アドレスのセット(35.235.240.0/20)が使用されます。したがって、ルールをこの CIDR 範囲に制限できます。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] ページに移動

  2. [ファイアウォール ルールを作成] をクリックします。

  3. [名前] を allow-ssh-from-iap に設定します。

  4. [VPC ネットワーク] は [default] のままにします。

  5. [ターゲット] で [指定されたターゲットタグ] を選択します。

  6. [ターゲットタグ] を http-tag に設定します。

  7. [ソースフィルタ] は [IP 範囲] のままにしておきます。

  8. [ソース IP の範囲] を 35.235.240.0/20 に設定します。

  9. [許可対象プロトコル / ポート] を tcp:22 に設定します。

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

    新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。

gcloud

  • allow-ssh-from-iap という名前のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-ssh-from-iap \
        --source-ranges 35.235.240.0/20 \
        --target-tags http-tag \
        --allow tcp:22
    

Terraform

  1. ファイアウォール ルールの Terraform ファイルを現在のディレクトリにコピーします。

    cp iap/vpc_firewall_rules.tf .

  2. Terraform 構成を適用します。

    terraform apply

トンネリングをテストする

  • Cloud Shell で、IAP を使用してインスタンス www-1 に接続します。

    gcloud compute ssh www-1 \
        --zone us-central1-b \
        --tunnel-through-iap
    

接続に成功すると、IAP を介してプライベート VM に直接トンネリングされる SSH セッションができます。

追加のユーザーにアクセスを許可する

IAP は、VM インスタンスに接続するときに既存のプロジェクトのロールと権限を使用します。デフォルトでは、インスタンスのオーナーが IAP で保護されたトンネル ユーザーのロールを持つ唯一のユーザーになります。他のユーザーが IAP トンネリングを使用して VM にアクセスできるようにするには、これらのユーザーにこのロールを付与する必要があります。

  1. Google Cloud コンソールで、[セキュリティ] > [Identity-Aware Proxy] に移動します。

    Google Cloud コンソールの [セキュリティ] ページにある IAP オプション。

    OAuth 同意画面を構成する必要があることを示すメッセージが表示された場合は、メッセージを無視してください。TCP 用 IAP とは関係ありません。

  2. [SSH と TCP のリソース] タブを選択します。

  3. 作成した VM を選択します。

    コンソールで 4 つのインスタンスがすべて選択された状態

  4. 右側にある [プリンシパルを追加] をクリックします。

  5. 権限を付与するユーザーを追加し、IAP で保護されたトンネル ユーザーロールを選択して、[保存] をクリックします。

まとめ

これで、SSH を使用してインスタンスに接続し、インスタンスを管理またはトラブルシューティングできるようになりました。

多くのアプリケーションは、パッチのダウンロード、パートナーとの接続、リソースのダウンロードで送信接続を行う必要があります。次のセクションでは、VM がこれらのリソースに到達できるように Cloud NAT を構成します。

取得用の Cloud NAT のデプロイ

Cloud NAT サービスを使用すると、外部 IP アドレスを持たない Google Cloud VM インスタンスをインターネットに接続できます。Cloud NAT は、インスタンスがインターネットに到達できるように、デフォルト ルートと送信 NAT を実装します。受信 NAT は実装しません。VPC ネットワークの外部にあるホストは、インスタンスによって開始された接続にのみ応答できます。Cloud NAT を使用して、インスタンスと独自の接続を開始することはできません。NAT は、Google Cloud 内のトラフィックには使用されません。

Cloud NAT はリージョン リソースです。リージョン内のサブネットのすべてのプライマリ IP アドレス範囲とセカンダリ IP アドレス範囲から送信されるトラフィックを許可するような構成も、いくつかの範囲にのみ許可を適用するような構成も可能です。

このセクションでは、以前に使用した各リージョンで Cloud NAT ゲートウェイを構成します。次の図は、このセクションで構築するアーキテクチャを示しています。灰色の領域は、このチュートリアルの他のパートで説明します。

インスタンスとインターネット間に Cloud NAT インスタンスがあることを示すソリューションのアーキテクチャ。

Cloud Router を使用して NAT 構成を作成する

Cloud NAT を使用するインスタンスと同じリージョンに Cloud Router インスタンスを作成する必要があります。Cloud NAT は、NAT 情報を VM に配置するためにのみ使用されます。実際の Cloud NAT ゲートウェイの一部としては使用されません。

この構成により、リージョン内のすべてのインスタンスが、すべてのプライマリとエイリアス IP の範囲に Cloud NAT を使用できるようになります。また、NAT ゲートウェイに外部 IP アドレスが自動的に割り当てられます。その他の選択肢については、gcloud compute routers のドキュメントをご覧ください。

コンソール

  1. [Cloud NAT] ページに移動します。

    [Cloud NAT] ページに移動

  2. [開始] または [NAT ゲートウェイを作成] をクリックします。

  3. [ゲートウェイの名前] を nat-config に設定します。

  4. [VPC ネットワーク] を default に設定します。

  5. [リージョン] を us-central1 に設定します。

  6. [Cloud Router] で [新しいルーターを作成します] を選択して、次の操作を行います。

    • [名前] を nat-router-us-central1 に設定します。
    • [作成] をクリックします。
  7. [作成] をクリックします。

  8. 手順を繰り返します。ただし、次の値を使用します。

    • 名前: nat-router-europe-west1
    • リージョン: europe-west1

gcloud

  1. 各リージョンで Cloud Router インスタンスを作成します。

    gcloud compute routers create nat-router-us-central1 \
        --network default \
        --region us-central1
    
    gcloud compute routers create nat-router-europe-west1 \
        --network default \
        --region europe-west1
    
  2. Cloud NAT のルーターを構成します。

    gcloud compute routers nats create nat-config \
        --router-region us-central1 \
        --router nat-router-us-central1 \
        --nat-all-subnet-ip-ranges \
         --auto-allocate-nat-external-ips
    
    gcloud compute routers nats create nat-config \
        --router-region europe-west1 \
        --router nat-router-europe-west1 \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    

Terraform

  1. Terraform NAT 構成ファイルを現在のディレクトリにコピーします。

    cp nat/vpc_nat_gateways.tf .

  2. Terraform 構成を適用します。

    terraform apply

Cloud NAT の構成をテストする

VM インスタンスからインターネットへの送信リクエストを作成できることをテストします。

  1. NAT 構成が VM に伝達されるまで待ちます。最大で 3 分ほどかかります。
  2. Cloud Shell で、作成したトンネルを使用してインスタンスに接続します。

    gcloud compute ssh www-1 --tunnel-through-iap
    
  3. インスタンスにログインしたら、curl コマンドを使用して送信リクエストを作成します。

    curl example.com
    

    次の出力が表示されます。

    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents.
            You may use this domain in examples without prior coordination or asking for
            permission.
        </p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    
    

コマンドが成功した場合、Cloud NAT を使用して VM がインターネットに接続できます。

まとめ

インスタンスで、パッチのダウンロード、パートナーとの接続、リソースのダウンロードを行うときに送信接続が可能になりました。

次のセクションでは、デプロイに負荷分散を追加し、リモート クライアントからサーバーにリクエストを送信できるように構成します。

サービス用の HTTP 負荷分散サービスの作成

アプリケーションで Cloud Load Balancing を使用すると、多くの利点があります。100 万件を超える秒間クエリ数に対して、シームレスかつスケーラブルにロード バランシングできます。また、VM から SSL オーバーヘッドをオフロードし、可用性とロケーションに基づいてクエリを最適なリージョンにルーティングできます。また、HTTP/2 や QUIC などの最新のプロトコルを利用できます。

このチュートリアルでは、別の重要な機能であるグローバル エニーキャスト IP 接続プロキシを利用します。この機能は、世界中に分散された Google のエッジで終端される単一のパブリック IP アドレスを提供します。これにより、クライアントは、Google Cloud のあらゆる場所にあるプライベート IP アドレスでホストされたリソースに接続できます。この構成は、DDoS 攻撃と直接攻撃からインスタンスを保護するうえで有用です。また、Google Cloud Armor などの機能を使用して、さらにセキュリティを強化することも可能です。

このセクションでは、次の操作を行います。

  1. VM インスタンスをリセットして、Apache ウェブサーバーをインストールします。
  2. ロードバランサからのアクセスを許可するファイアウォール ルールを作成する。
  3. ロードバランサに静的なグローバル IPv4 および IPv6 アドレスを割り当てる。
  4. インスタンスにインスタンス グループを作成する。
  5. インスタンスへのトラフィックの送信を開始する。

次の図は、このセクションで構築するアーキテクチャを示しています。灰色の領域は、このチュートリアルの他のパートで説明します。

2 つのインスタンス グループにある 4 つのインスタンスをハイライト表示したアーキテクチャ。

VM インスタンスをリセットする

このチュートリアルで、前に VM インスタンスを作成したときは、外部 IP アドレスが割り振られておらず、Cloud NAT が構成されていなかったため、インターネットにアクセスできませんでした。このため、Apache をインストールする起動スクリプトは正常に完了できませんでした。

起動スクリプトを再実行する最も簡単な方法は、Apache ウェブサーバーをインストールし、次のセクションで使用できるよう、これらのインスタンスをリセットすることです。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. www-1www-2www-3www-4 を選択します。

  3. ページ上部にある [リセット] ボタンをクリックします。

    [リセット] ボタンが表示されていない場合は、[その他の操作]()をクリックして [リセット] を選択します。

  4. ダイアログで [リセット] をクリックして、4 つのインスタンスがリセットされたことを確認します。

gcloud

  1. 4 つのインスタンスをリセットします。

    gcloud compute instances reset www-1 \
        --zone us-central1-b
    
    gcloud compute instances reset www-2 \
        --zone us-central1-b
    
    gcloud compute instances reset www-3 \
        --zone europe-west1-b
    
    gcloud compute instances reset www-4 \
        --zone europe-west1-b
    

ファイアウォールを開く

次に、ロードバランサから VM インスタンスへのトラフィックを許可するファイアウォール ルールを作成します。このルールにより、ロードバランサとヘルスチェックの両方で使用される Google Cloud アドレス範囲からのトラフィックが許可されます。このファイアウォール ルールでは、前に作成した http-tag タグを使用します。ファイアウォール ルールによって、指定ポートへのトラフィックは、タグが設定されたインスタンスに到達することが許可されます。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] ページに移動

  2. [ファイアウォール ルールを作成] をクリックします。

  3. [名前] を allow-lb-and-healthcheck に設定します。

  4. [VPC ネットワーク] は default のままにします。

  5. [ターゲット] で [指定されたターゲットタグ] を選択します。

  6. [ターゲットタグ] を http-tag に設定します。

  7. [ソースフィルタ] は [IP 範囲] のままにしておきます。

  8. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。

  9. [許可対象プロトコル / ポート] を tcp:80 に設定します。

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

    新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。

gcloud

  • allow-lb-and-healthcheck という名前のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-lb-and-healthcheck \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --target-tags http-tag \
         --allow tcp:80
    

Terraform

  1. Terraform 負荷分散構成ファイルを現在のディレクトリにコピーします。

    cp lb/* .

  2. Terraform 構成を適用します。

    terraform apply

ロードバランサに外部 IP アドレスを割り振る

インターネットに送信するトラフィックを処理する場合は、ロードバランサに外部アドレスを割り当てる必要があります。IPv4 アドレス、IPv6 アドレス、またはその両方を割り当てることができます。このセクションでは、DNS の追加に適した静的 IPv4 アドレスと IPv6 アドレスを予約します。

パブリック IP アドレスはロードバランサで使用されるため、追加料金はかかりません。

コンソール

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

    [外部 IP アドレス] ページに移動

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

  3. [名前] を lb-ip-cr に設定します。

  4. [タイプ] は [グローバル] のままにします。

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

  6. もう一度、[静的アドレスを予約] をクリックして、IPv6 アドレスを予約します。

  7. [名前] を lb-ipv6-cr に設定します。

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

  9. [タイプ] は [グローバル] のままにします。

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

gcloud

  1. IPv4 用に lb-ip-cr という名前の静的 IP アドレスを作成します。

    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    
  2. IPv6 用に lb-ipv6-cr という名前の静的 IP アドレスを作成します。

    gcloud compute addresses create lb-ipv6-cr \
        --ip-version=IPV6 \
        --global
    

インスタンス グループを作成してインスタンスを追加する

Google Cloud ロードバランサでは、トラフィックのバックエンドとして機能するインスタンス グループが必要です。説明を簡単にするため、このチュートリアルでは非マネージド インスタンス グループを使用します。ただし、マネージド インスタンス グループを使用して、自動スケーリング、自動修復、リージョン(マルチゾーン)デプロイ、自動更新などの機能を利用することもできます。

このセクションでは、使用しているゾーンごとにインスタンス グループを作成します。

コンソール

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. [インスタンス グループを作成] をクリックします。

  3. 左側にある [新しい非マネージド インスタンス グループ] をクリックします。

  4. [名前] を us-resources-w に設定します。

  5. [リージョン] を us-central1 に設定します。

  6. [ゾーン] を us-central1-b に設定します。

  7. [ネットワーク](デフォルト)と [サブネットワーク](デフォルト)を選択します。

  8. [VM インスタンス] で、次の操作を行います。

    • [インスタンスを追加] をクリックして、www-1 を選択します。
    • [インスタンスを追加] をもう一度クリックして、www-2 を選択します。
    • [作成] をクリックします。
  9. この手順を繰り返して 2 番目のインスタンス グループを作成します。ただし、次の値を使用します。

    • 名前: europe-resources-w
    • ゾーン: europe-west1-b
    • インスタンス: www-3www-4
  10. [インスタンス グループ] ページで、2 つのインスタンス グループがあり、それぞれに 2 つのインスタンスがあることを確認します。

gcloud

  1. us-resources-w インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-resources-w \
        --zone us-central1-b
    
  2. www-1 インスタンスと www-2 インスタンスを追加します。

    gcloud compute instance-groups unmanaged add-instances us-resources-w \
        --instances www-1,www-2 \
        --zone us-central1-b
    
  3. europe-resources-w インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create europe-resources-w \
        --zone europe-west1-b
    
  4. www-3 インスタンスと www-4 インスタンスを追加します。

    gcloud compute instance-groups unmanaged add-instances europe-resources-w \
        --instances www-3,www-4 \
        --zone europe-west1-b
    

負荷分散サービスを構成する

ロードバランサ機能には、連携する複数のサービスが含まれます。このセクションでは、サービスを設定して接続します。次のサービスを作成します。

  • 名前付きポート。ロードバランサはこれを使用して、トラフィックをインスタンス グループに転送します。
  • ヘルスチェック。インスタンスが正常に機能しているかを確認します。ロードバランサは、正常なインスタンスにのみトラフィックを送信します。
  • バックエンド サービス。インスタンスの使用状況と正常性をモニタリングします。バックエンド サービスは、インスタンス グループ内のインスタンスがトラフィックを受信できるかどうかを確認します。インスタンスに十分な容量があるときに、インスタンスがトラフィックを受信できない場合、ロードバランサはトラフィックをリダイレクトします。バックエンドは、インスタンス グループの容量(最大 CPU 使用率または最大秒間クエリ数)を定義します。
  • URL マップ。リクエストの URL を解析し、リクエスト URL のホストとパスに基づいてリクエストを特定のバックエンド サービスに転送します。このチュートリアルでは、コンテンツ ベースの転送を使用していないため、URL マップにはデフォルトのマッピングのみが含まれています。
  • ターゲット プロキシ。ユーザーからのリクエストを受け取り、それを URL マップに転送します。
  • 2 つのグローバル転送ルール(IPv4 と IPv6 にそれぞれ 1 つずつ)。グローバルな外部 IP アドレス リソースを保持します。グローバル転送ルールは、受信リクエストをターゲット プロキシに転送します。

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

このセクションでは、ロードバランサを作成し、トラフィックを処理するデフォルトのバックエンド サービスを構成します。ヘルスチェックも作成します。

コンソール

構成を開始する

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

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

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

基本構成

  1. [ロードバランサの名前] を web-map に設定します。

ロードバランサを構成する

  1. [Create global external Application Load Balancer] ページの左パネルで、[バックエンドの構成] をクリックします。
  2. [バックエンド サービスとバックエンド バケットの作成または選択] リストで、[バックエンド サービス]、[バックエンド サービスを作成] の順に選択します。[バックエンド サービスの作成] ダイアログ ボックスが表示されます。
  3. [名前] を web-map-backend-service に設定します。
  4. [プロトコル] を設定します。HTTP プロトコルの場合は、デフォルト値のままにします。
  5. [バックエンド タイプ] で、[インスタンス グループ] を選択します。
  6. [バックエンド] で、[インスタンス グループ] を us-resources-w に設定します。
  7. [バックエンドを追加] をクリックします。
  8. europe-resources-w インスタンス グループを選択して、次の操作を行います。
    • ロードバランサとインスタンス間の HTTP トラフィックの場合、[ポート番号] が 80 に設定されていることを確認します。
    • 残りのフィールドはデフォルト値のままにします。
  9. [完了] をクリックします。
  10. [ヘルスチェック] で、[ヘルスチェックを作成] または [別のヘルスチェックを作成] を選択します。
  11. 次のヘルスチェック パラメータを設定します。
    • 名前: http-basic-check
    • プロトコル: HTTP
    • ポート: 80
  12. [作成] をクリックします。

gcloud

  1. インスタンス グループごとに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。

    gcloud compute instance-groups unmanaged set-named-ports us-resources-w \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports europe-resources-w \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. ヘルスチェックを作成します。

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. バックエンド サービスを作成します。

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    

    HTTP を使用してインスタンスに移動するため、--protocol フラグを HTTP に設定します。ヘルスチェックには、先ほど作成した http-basic-check ヘルスチェックを使用します。

  4. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-w \
        --instance-group-zone us-central1-b \
        --global
    
    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-w \
        --instance-group-zone europe-west1-b \
        --global
    

ホストルールとパスルールを設定する

コンソール

  • [Create global external Application Load Balancer] ページの左パネルで、[ホストとパスのルール] をクリックします。

    このチュートリアルでは、すべてのトラフィックがデフォルト ルールに従うため、ホストルールまたはパスルールを設定する必要はありません。したがって、事前設定されたデフォルト値をそのまま使用します。

gcloud

  1. あらゆるインスタンスへの受信リクエストをすべて振り向けるデフォルトの URL マップを作成します。

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    
  2. URL マップにリクエストをルーティングするターゲット HTTP プロキシを作成します。

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map web-map
    

フロントエンドを設定してセットアップを完了する

コンソール

  1. [Create global external Application Load Balancer] ページの左パネルで、[フロントエンドの構成] をクリックします。
  2. [名前] を http-cr-rule に設定します。
  3. [プロトコル] を HTTP に設定します。
  4. [IP バージョン] を IPv4 に設定します。
  5. [IP アドレス] リストで、先ほど作成したアドレスの [lb-ip-cr] を選択します。
  6. [ポート] が 80 に設定されていることを確認します。
  7. [完了] をクリックします。
  8. [フロントエンド IP とポートの追加] をクリックします。
  9. [名前] を http-cr-ipv6-rule に設定します。
  10. [プロトコル] で [HTTP] を選択します。
  11. [IP バージョン] を IPv6 に設定します。
  12. [IP アドレス] リストで、先ほど作成したもう 1 つのアドレスの [lb-ipv6-cr] を選択します。
  13. [ポート] が 80 に設定されていることを確認します。
  14. [作成] をクリックします。
  15. [完了] をクリックします。
  16. [Create global external Application Load Balancer] ページの左パネルで、[確認と完了] をクリックします。
  17. 現在の設定と作成しようとしている内容を比較します。
  18. 設定が正しい場合は、[作成] をクリックします。

    負荷分散ページに戻ります。ロードバランサの作成後、その横にある緑色のチェックマークは、ロードバランサが稼働中であることを示します。

gcloud

  1. ロードバランサ用に作成した静的 IP アドレスを取得します。次の手順で使用するため、これらの値をメモしておきます。

    gcloud compute addresses list
    
  2. 受信リクエストをプロキシにルーティングする 2 つのグローバル転送ルール(1 つは IPv4 用、もう 1 つは IPv6 用)を作成します。コマンド内の lb_ip_address は、作成した静的 IPv4 アドレスで置き換えます。lb_ipv6_address は、作成した IPv6 アドレスで置き換えます。

    gcloud compute forwarding-rules create http-cr-rule \
        --address lb_ip_address \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    
    gcloud compute forwarding-rules create http-cr-ipv6-rule \
        --address lb_ipv6_address \
        --global \
        --target-http-proxy http-lb-proxy \
       --ports 80
    

    グローバル転送ルールを作成した後、構成が伝播されるまでに数分かかることがあります。

構成のテスト

このセクションでは、HTTP リクエストをインスタンスに送信して、負荷分散構成が機能していることを確認します。

コンソール

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

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

  2. web-map という名前のロードバランサを選択して、先ほど作成したロードバランサの詳細を表示します。

  3. [バックエンド] セクションで、[正常] 列を表示して、インスタンスが正常であることを確認します。

    インスタンスが正常であると示されるまでに少し時間がかかる場合があります。

  4. インスタンスが正常と表示されたら、[フロントエンド] セクションから [IP: ポート] の値をコピーし、ブラウザに貼り付けます。

    ブラウザにデフォルトのコンテンツ ページが表示されます。

gcloud

  1. グローバル転送ルールの IP アドレスを取得し、メモしておきます。これは次のステップで使用します。

    gcloud compute forwarding-rules list
    
  2. curl コマンドを使用して、サービスのさまざまな URL に対するレスポンスをテストします。IPv4 と IPv6 の両方を試してください。IPv6 の場合は、http://[2001:DB8::]/ のようにアドレスを [] で囲む必要があります。

    curl http://ipv4-address
    
    curl -g -6 "http://[ipv6-address]/"
    

まとめ

VM がインターネットへのトラフィックを処理し、インターネットからデータを取得できるようになりました。管理タスクを実行するために、SSH 経由でアクセスすることもできます。この機能はすべてプライベート IP アドレスのみを使用して実現されます。これは、インターネットから到達可能な IP アドレスを公開しないことで、直接攻撃から保護するのに役立ちます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ