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

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

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

目標

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

費用

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

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

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

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

始める前に

  1. サービス プロデューサー リソースに使用するプロジェクトを作成または選択します。このプロジェクトは、以降のチュートリアルで PRODUCER_PROJECT として参照されます。
    1. In the Google Cloud console, go to the project selector page.

      Go to project selector

    2. Select or create a Google Cloud project.

      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. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  3. Make sure that you have the following role or roles on the project: Compute Engine > Compute Network Admin, Compute Engine > Compute Security Admin, Compute Engine > Compute Instance Admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      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
    

次のステップ