GSP007
概要
このハンズオンラボでは、Compute Engine 仮想マシン(VM)上で実行されるパススルー ネットワーク ロードバランサ(NLB)を設定する方法を学びます。レイヤ 4(L4)NLB は、IP アドレスやポート番号などのネットワーク レベルの情報に基づいてトラフィックを処理し、トラフィックの内容は検査しません。
Google Cloud でロードバランスするには、いくつかの方法があります。
このラボでは、次のロードバランサの設定について詳しく説明します。
根底にあるコンセプトを理解できるよう、コマンドは手動で入力することをおすすめしますが、多くのラボでは必要なコマンドが含まれたコードブロックが用意されています。このラボでも、コードブロックのコマンドをコピーして、該当する場所に貼り付けることもできます。
目標
このラボでは、次のタスクの実行方法について学びます。
- リソースのデフォルトのリージョンとゾーンを構成する。
- 複数のウェブサーバー インスタンスを作成する。
- ロード バランシング サービスを構成する。
- トラフィックを分散するように転送ルールを構成する。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
右側の [ラボの設定とアクセス] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- このラボで使用する一時的な認証情報(ユーザー名とパスワード)
- このラボを行うために必要なその他の情報(ある場合)
ラボのタイマーはページの上部に表示され、残り時間が示されます。
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示された場合は、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの設定とアクセス] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの設定とアクセス] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで指定された認証情報を使用する必要があります。ご自身の Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後のページはクリックして先に進みます。
- 利用規約に同意します。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
しばらくすると、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、 が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. すべてのリソースにデフォルトのリージョンとゾーンを設定する
-
デフォルト リージョンを設定します。
gcloud config set compute/region {{{project_0.default_region | Region}}}
-
gcloud config set compute/region {{{project_0.default_region | Region}}}
gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
Cloud Shell でデフォルト ゾーンを設定します。
ゾーンとリージョンの選択の詳細については、Compute Engine のリージョンとゾーンのドキュメントをご覧ください。https://cloud.google.com/compute/docs/zones
タスク 2. 複数のウェブサーバー インスタンスを作成する
このロード バランシングのシナリオでは、Compute Engine VM インスタンスを 3 つ作成し、これらのインスタンスに Apache をインストールします。また、HTTP トラフィックがこれらのインスタンスに到達できるようにファイアウォール ルールを追加します。
以下のコードでは、ゾーンが に設定されます。tags フィールドを設定すると、これらのインスタンスをファイアウォール ルールなどで同時に参照できます。これらのコマンドにより、Apache も各インスタンスにインストールされ、インスタンスごとに固有のホームページが提供されます。
gcloud compute instances create www1 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
" | tee /var/www/html/index.html'
次のコードを使用して、デフォルト ゾーンに仮想マシン www1 を作成します。
gcloud compute instances create www1 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
gcloud compute instances create www2 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
Web Server: www1
" | tee /var/www/html/index.html'
" | tee /var/www/html/index.html'
gcloud compute instances create www3 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
次のコードを使用して、デフォルト ゾーンに仮想マシン www2 を作成します。
" | tee /var/www/html/index.html'
gcloud compute instances create www2 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "Web Server: www2
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
" | tee /var/www/html/index.html'
デフォルト ゾーンに仮想マシン
www3 を作成します。
gcloud compute instances create www3 \
--zone={{{project_0.default_zone | Zone}}} \
--tags=network-lb-tag \
--machine-type=e2-small \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image ID}}} \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "Web Server: www3
gcloud compute instances list
" | tee /var/www/html/index.html'
curl http://[IP_ADDRESS]
これらの VM インスタンスへの外部トラフィックを許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
次に、インスタンスの外部 IP アドレスを取得してインスタンスが実行されていることを確認する必要があります。
次のコマンドを実行してインスタンスを一覧表示します。インスタンスの IP アドレスは EXTERNAL_IP 列に表示されます。
gcloud compute instances list
gcloud compute addresses create network-lb-ip-1 \
--region {{{project_0.default_region | Region}}}
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-03-xxxxxxxxxxx/regions/{{{project_0.startup_script.project_region}}}/addresses/network-lb-ip-1].
curl を使用して、各インスタンスが実行中であることを確認します。[IP_ADDRESS] は、各 VM の外部 IP アドレスに置き換えてください。
curl http://[IP_ADDRESS]
gcloud compute http-health-checks create basic-check
[進行状況を確認] をクリックして、ウェブサーバーのグループが作成されたことを確認します。
複数のウェブサーバー インスタンスを作成する
タスク 3. ロード バランシング サービスを構成する
ロード バランシング サービスを構成すると、構成した静的外部 IP アドレス宛てのパケットを仮想マシン インスタンスが受信するようになります。
Compute Engine イメージを使用して作成されたインスタンスは、この IP アドレスに対処するように自動的に構成されます。
注: ネットワーク ロード バランシングの設定方法の詳細については、バックエンド サービスベースの外部パススルー ネットワーク ロードバランサの概要ガイドをご覧ください。
- https://cloud.google.com/compute/docs/load-balancing/network/
gcloud compute target-pools create www-pool \
--region {{{project_0.default_region | Region}}} --http-health-check basic-check
- ロードバランサに使用する静的外部 IP アドレスを作成します。
gcloud compute addresses create network-lb-ip-1 \
--region {{{project_0.default_region | Region}}}
gcloud compute target-pools add-instances www-pool \
--instances www1,www2,www3
出力:
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-03-xxxxxxxxxxx/regions/{{{project_0.startup_script.project_region}}}/addresses/network-lb-ip-1].
レガシー HTTP ヘルスチェック リソースを追加します。-
gcloud compute http-health-checks create basic-check
[進行状況を確認] をクリックして、ウェブサーバーを参照する L4 ネットワーク ロードバランサが作成されたことを確認します。
ロード バランシング サービスを構成する
gcloud compute forwarding-rules create www-rule \
--region {{{project_0.default_region | Region}}} \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool
タスク 4. ターゲット プールと転送ルールを作成するターゲット プールは、外部パススルー NLB から受信トラフィックを受け取るバックエンド インスタンスのグループです。ターゲット プールのすべてのバックエンド インスタンスは、同じ Google Cloud リージョンに存在する必要があります。
- 次のコマンドを実行して、ターゲット プールを作成し、ヘルスチェックを使用します。ターゲット プールが機能するには、ヘルスチェックが必要です。
gcloud compute target-pools create www-pool \
--region {{{project_0.default_region | Region}}} --http-health-check basic-check
gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}}
-
先ほど作成したインスタンスをプールに追加します。
IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}} --format="json" | jq -r .IPAddress)
-
gcloud compute target-pools add-instances www-pool \
--instances www1,www2,www3
echo $IPADDRESS
次に、転送ルールを作成します。転送ルールは、ネットワーク トラフィックをロードバランサのバックエンド サービスにルーティングする方法を指定します。https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts
while true; do curl -m1 $IPADDRESS; done
転送ルールを追加します。
gcloud compute forwarding-rules create www-rule \
--region {{{project_0.default_region | Region}}} \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool
[進行状況を確認] をクリックして、ターゲット プールと転送ルールが作成されたことを確認します。
ターゲット プールと転送ルールを作成する
タスク 5. インスタンスにトラフィックを送信する
ロード バランシング サービスの構成が完了したので、転送ルールへのトラフィックの送信を開始して、トラフィックが複数のインスタンスに分散される様子を観察できます。
-
gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}}
外部 IP アドレスにアクセスします。
IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region {{{project_0.default_region | Region}}} --format="json" | jq -r .IPAddress)