ロード バランシング サービスを作成する

このチュートリアルでは、サービス プロデューサーが内部パススルー ネットワーク ロードバランサを使用するシンプルなサービスを作成する方法について説明します。デフォルトでは、内部パススルー ネットワーク ロードバランサは、それをホストする VPC ネットワーク内からのみ使用できます。

このチュートリアルは、クラウド アーキテクト、ネットワーク アーキテクト、ネットワーク管理者、IT 管理者を対象としています。

目標

  • サービス プロデューサー リソースのネットワーキングを構成する
  • ロードバランサのバックエンド用の VM リソースを作成する
  • ロードバランサ コンポーネントを構成する
  • ロードバランサへのアクセスをテストする

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーの方は、無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. サービス プロデューサー リソースに使用するプロジェクトを作成または選択します。このプロジェクトは、以降のチュートリアルで PRODUCER_PROJECT として参照されます。
    1. Google Cloud コンソールで、プロジェクトの選択ページに移動します。

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

    2. Google Cloud プロジェクトの選択または作成

      Roles required to select or create a project

      • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
      • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
  2. Compute Engine API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    API の有効化

  3. プロジェクトに次のロール(複数の場合あり)が割り当てられていることを確認します。 Compute Engine > Compute Network Admin, Compute Engine > Compute Security Admin, Compute Engine > Compute Instance Admin

    ロールを確認する

    1. Google Cloud コンソールで、[IAM] ページに移動します。

      IAM に移動
    2. プロジェクトを選択します。
    3. [プリンシパル] 列で、自分または自分が所属するグループの行をすべて確認します。所属するグループについては、管理者にお問い合わせください。

    4. 自分のメールアドレスを含む行の [ロール] 列で、ロールのリストに必要なロールが含まれているかどうか確認します。

    ロールを付与する

    1. Google Cloud コンソールで、[IAM] ページに移動します。

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [ アクセスを許可] をクリックします。
    4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

    5. [ロールを選択] をクリックし、ロールを検索します。
    6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
    7. [保存] をクリックします。

ネットワークを構成する

以降のセクションでは、サービスのネットワーク、サブネット、ファイアウォール ルールを作成する方法について説明します。

ネットワークとサブネットを構成する

ロードバランサのサービス ネットワークとサブネットを作成するには、次のセクションの手順を完了します。

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「service-network」と入力します。

  4. [サブネット作成モード] で [カスタム] を選択します。

  5. [新しいサブネット] セクションに、次の情報を入力します。

    1. [名前] に「service-subnet」と入力します。
    2. [リージョン] で、使用するリージョンを選択します。
    3. [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
    4. [IPv4 範囲] に「10.10.10.0/24」と入力します。
    5. [完了] をクリックします。
  6. [作成] をクリックします。

gcloud

  1. カスタムモードの VPC ネットワークを作成します。

    gcloud compute networks create service-network --subnet-mode=custom
    
  2. service-network ネットワークにサブネットを作成します。

    gcloud compute networks subnets create service-subnet \
        --network=service-network \
        --range=10.10.10.0/24 \
        --region=REGION
    

    REGION は、使用するリージョンに置き換えます。

ファイアウォール ルールを構成する

次のトラフィックを許可するファイアウォール ルールを作成します。

  • fw-allow-subnet: 10.10.10.0/24 からのトラフィックが 10.10.10.0/24 内の他のリソースに到達できるようにします。
  • fw-allow-ssh: 0.0.0.0/0 からの SSH トラフィックが allow-ssh ネットワーク タグを持つ VM に到達できるようにします。
  • fw-allow-healthcheck: Google Cloudヘルスチェック システムからのトラフィックが allow-healthcheck ネットワーク タグを持つ VM に到達できるようにします。

コンソール

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

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

  2. サブネット トラフィックを許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。

    • [名前] に「fw-allow-subnet」と入力します。
    • [ネットワーク] で service-network を選択します。
    • [優先度] に「1000」と入力します。
    • [トラフィックの方向] で [上り(内向き)] をオンにします。
    • [一致したときのアクション] で [許可] をオンにします。
    • [ターゲット] で [ネットワーク上のすべてのインスタンス] を選択します。
    • [ソースフィルタ] で [IPv4 範囲] を選択します。
    • [送信元 IPv4 範囲] に「10.10.10.0/24」と入力します。
    • [プロトコルとポート] で、[すべて許可] を選択します。
  3. [Create] をクリックします。

  4. 受信 SSH 接続を許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。

    • [名前] に「fw-allow-ssh」と入力します。
    • [ネットワーク] で service-network を選択します。
    • [優先度] に「1000」と入力します。
    • [トラフィックの方向] で [上り(内向き)] をオンにします。
    • [一致したときのアクション] で [許可] をオンにします。
    • [ターゲット] で [指定されたターゲットタグ] を選択します。
    • [ターゲットタグ] に「allow-ssh」と入力します。
    • [ソースフィルタ] で [IPv4 範囲] を選択します。
    • [送信元 IPv4 範囲] に「0.0.0.0/0」と入力します。
    • [プロトコルとポート] で [指定したプロトコルとポート] を選択し、[TCP] チェックボックスをオンにします。[ポート] に「22」と入力します。
  5. [Create] をクリックします。

  6. Google Cloud ヘルスチェックを許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。

    • [名前] に「fw-allow-healthcheck」と入力します。
    • [ネットワーク] で service-network を選択します。
    • [優先度] に「1000」と入力します。
    • [トラフィックの方向] で [上り(内向き)] をオンにします。
    • [一致したときのアクション] で [許可] をオンにします。
    • [ターゲット] で [指定されたターゲットタグ] を選択します。
    • [ターゲットタグ] に「allow-healthcheck」と入力します。
    • [ソースフィルタ] で [IPv4 範囲] を選択します。
    • [送信元 IPv4 範囲] に「130.211.0.0/22」と「35.191.0.0/16」を入力します。
    • [プロトコルとポート] で、[すべて許可] を選択します。
  7. [Create] をクリックします。

gcloud

  1. fw-allow-subnet ファイアウォール ルールを作成して、サブネットとの通信を許可します。

    gcloud compute firewall-rules create fw-allow-subnet \
        --network=service-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.10.10.0/24 \
        --rules=tcp,udp,icmp
    

  1. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=service-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=0.0.0.0/0 \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

  1. fw-allow-healthcheck ルールを作成して Google Cloudヘルスチェックを許可します。

    gcloud compute firewall-rules create fw-allow-healthcheck \
        --network=service-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-healthcheck \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

ロードバランサのバックエンド用の VM リソースを作成する

ロードバランサで使用する VM とインスタンス グループを作成します。

バックエンド VM を作成する

作成するサービスは、可用性を高めるために 2 つの VM(vm-1vm-2)で実行されます。VM は同じゾーンにありますが、本番環境では複数のゾーンを使用することをおすすめします。

次の手順では、VM の作成に加えて、次の処理も行います。

コンソール

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

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

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

  3. [名前] に「vm-1」と入力します。

  4. [リージョン] と [ゾーン] で、リージョンとそのリージョン内のゾーンを選択します。

  5. ナビゲーション メニューで、[OS とストレージ] に移動します。

  6. [オペレーティング システムとストレージ] ペインで、ブートディスクに [Debian GNU/Linux 12(bookworm)] が選択されていることを確認します。別の画像を選択する必要がある場合は、[変更] をクリックします。

  7. ナビゲーション メニューで、[ネットワーキング] に移動します。

  8. [ネットワーク タグ] に「allow-ssh」、「allow-healthcheck」、「allow-nat」を入力します。

  9. [ネットワーク インターフェース] で、次のように選択します。

    • [ネットワーク] で service-network を選択します。
    • [サブネット] で service-subnet を選択します。
    • [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
    • [プライマリ内部 IPv4 アドレス] で [エフェメラル(自動)] を選択します。
    • [外部 IPv4 アドレス] で [エフェメラル] を選択します。
  10. ナビゲーション メニューで、[詳細設定] に移動します。

  11. [自動化] セクションの [起動スクリプト] フィールドに、次のスクリプトを入力します。

    
    #! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed
    

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

  13. これらの手順を繰り返して、vm-1 と同じリージョンとゾーンに vm-2 という名前の別の VM を作成します。

gcloud

  1. 次のコマンドを実行して、2 つの VM を作成します。

    gcloud compute instances create vm-1 \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-healthcheck,allow-nat \
        --subnet=service-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    
    gcloud compute instances create vm-2 \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-healthcheck,allow-nati \
        --subnet=service-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    

    ZONE は、使用するゾーンに置き換えます。

インスタンス グループの作成

ロードバランサ バックエンドで VM を使用するには、VM をインスタンス グループに追加する必要があります。

コンソール

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

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

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

  3. ナビゲーション パネルで [新しい非マネージド インスタンス グループ] をクリックします。

  4. [名前] に「ig-1」と入力します。

  5. [ロケーション] セクションで、VM と同じリージョンとゾーンを選択します。

  6. [ネットワーク] で [service-network] を選択します。

  7. [サブネットワーク] で [service-subnet] を選択します。

  8. [VM インスタンス] セクションで、vm-1vm-2 をインスタンス グループに追加します。

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

gcloud

  1. 非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-1 \
        --zone=ZONE
    

    ZONE は、VM を含むゾーンに置き換えます。

  2. VM をインスタンス グループに追加します。

    gcloud compute instance-groups unmanaged add-instances ig-1 \
        --zone=ZONE \
        --instances=vm-1,vm-2
    

ロードバランサ コンポーネントを構成する

ヘルスチェックとバックエンド サービスから開始して、内部パススルー ネットワーク ロードバランサのすべてのコンポーネントを構成し、次にフロントエンド コンポーネントを構成します。

  • ヘルスチェック。HTTP 200 OK ステータス コードをチェックする HTTP ヘルスチェックを使用します。

  • バックエンド サービス。内部ロードバランサを介して HTTP トラフィックを渡す必要があるため、UDP ではなく TCP を使用する必要があります。

  • 転送ルール。単一の内部転送ルール service-rule を作成します。

  • 内部 IP アドレス。転送ルールを作成する際に、内部 IP アドレス 10.10.10.99 を指定します。

コンソール

構成を開始する

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

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

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

基本構成

[Create internal passthrough Network Load Balancer] ページで、次の情報を入力します。

  • [ロードバランサの名前] に「service-lb」と入力します。
  • [リージョン] で、VM と同じリージョンを選択します。
  • [ネットワーク] で service-network を選択します。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. [ヘルスチェック] リストで [ヘルスチェックを作成] をクリックし、次の情報を入力します。
    • [名前:] に「hc-http-80」と入力します。
    • [プロトコル:] で [HTTP] を選択します。
    • [ポート:] に「80」と入力します。
    • [プロキシのプロトコル:] で [NONE] を選択します。
    • [リクエストパス:] に「/」と入力します。
  3. [作成] をクリックします。
  4. [バックエンド] の [新しいバックエンド] セクションで、[IPv4(シングルスタック)] を選択します。
  5. [インスタンス グループ] で、ig-1 インスタンス グループを選択し、[完了] をクリックします。
  6. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

フロントエンドを構成する

  1. [フロントエンドの構成] をクリックします。
  2. [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。
    1. [名前] に「service-rule」と入力します。
    2. [サブネットワーク] で、[service-subnet] を選択します。
    3. [内部 IP の目的] セクションの [IP アドレス] リストで、[IP アドレスを作成] を選択し、次の情報を入力します。
      • [名前] に「service-rule-ip」と入力します。
      • [IP バージョン] で [IPv4] を選択します。
      • [静的 IP アドレス] で、Let me choose を選択します。
      • [カスタム IP アドレス] に「10.10.10.99」と入力します。
    4. [予約] をクリックします。
    5. [ポート] で [単一] を選択し、[ポート番号] に 80 と入力します。
    6. [完了] をクリックします。
    7. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

構成を確認する

  1. [確認と完了] をクリックします。
  2. ロードバランサの構成を確認します。
  3. [作成] をクリックします。

gcloud

  1. 新しいリージョン HTTP ヘルスチェックを作成して、ポート 80 で VM との HTTP 接続をテストします。

    gcloud compute health-checks create http hc-http-80 \
        --region=REGION \
        --port=80
    

    REGION は、バックエンド VM と同じリージョンに置き換えます。

  2. HTTP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create service-lb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=REGION \
        --health-checks=hc-http-80 \
        --health-checks-region=REGION
    

    REGION は、バックエンド VM と同じリージョンに置き換えます。

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

    gcloud compute backend-services add-backend service-lb \
        --region=REGION \
        --instance-group=ig-1 \
        --instance-group-zone=ZONE
    

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

    • REGION: バックエンド VM と同じリージョン。
    • ZONE: バックエンド VM と同じゾーン。
  4. バックエンド サービスの転送ルールを作成します。

    gcloud compute forwarding-rules create service-rule \
        --region=REGION \
        --load-balancing-scheme=internal \
        --network=service-network \
        --subnet=service-subnet \
        --address=10.10.10.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=service-lb \
        --backend-service-region=REGION
    

    REGION は、バックエンド VM と同じリージョンに置き換えます。

ロードバランサへのアクセスをテストする

ロードバランサが機能していることをテストするには、テスト VM を作成し、そこからロードバランサにリクエストを送信します。

テスト用のクライアント VM を作成する

バックエンド(サーバー)VM と同じリージョンにクライアント VM を作成します。

コンソール

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

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

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

  3. [名前] に「producer-test」と入力します。

  4. [リージョン] で、バックエンド VM と同じリージョンを選択します。

  5. [ゾーン] で、そのリージョンのゾーンを選択します。

  6. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • [ネットワーク] で [service-network] を選択します。
      • [サブネット] で、[service-subnet] を選択します。
  7. [作成] をクリックします。

gcloud

gcloud compute instances create producer-test \
    --zone=ZONE \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=service-subnet

ZONE は、バックエンド VM と同じリージョンにあるゾーンに置き換えます。

接続をテストする

このテストでは、クライアント VM からロードバランサに接続します。想定される動作は、トラフィックがロードバランサのバックエンド VM に分散されることです。

  1. クライアント VM インスタンスに接続します。
    gcloud compute ssh producer-test --zone=ZONE
    
    ZONE は、クライアント VM のゾーンに置き換えます。
  2. curl を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.html のコンテンツによる HTML レスポンスのテキストとして表示されます。たとえば、想定されるレスポンスは Page served from: vm-1Page served from: vm-2 のようになります。
    curl -s http://10.10.10.99
    

次のステップ