- デフォルトの Virtual Private Cloud(VPC)ネットワーク
- Compute Engine マネージド インスタンス グループ
- バックエンド トラフィックにポート 80 を指定する名前付きポート
- デフォルトの URL マップ
- シンプルなバックエンド ヘルスチェック
- シンプルなフロントエンド転送ルール
- 予約済み外部 IP アドレス
- SSL 証明書
IPv6 と SSL 証明書の設定を含むコンテンツ ベースのマルチリージョンの例については、マルチ リージョンのコンテンツ ベースの外部 HTTPS ロードバランサの設定をご覧ください。
一般的なコンセプトについては、外部 HTTP(S) 負荷分散の概要をご覧ください。
GKE を使用している場合、ロードバランサは通常、Kubernetes Ingress コントローラによって構成されます。詳細については、外部負荷分散向け Ingress の構成をご覧ください。
HTTPS ロードバランサのトポロジ
このガイドでは、次の図に示す構成を作成します。
この図のイベントの順序は次のとおりです。
- クライアントが転送ルールで定義された外部 IPv4 アドレスにコンテンツのリクエストを送信します。
- 転送ルールによって、リクエストがターゲット HTTPS プロキシに振り向けられます。
- ターゲット プロキシは、URL マップのルールを使用して、単一のバックエンド サービスがすべてのリクエストを受信していることを確認します。
- ロードバランサは、このバックエンド サービスにはインスタンス グループが 1 つのみ存在していることを確認し、このグループに属する仮想マシン(VM)インスタンスの 1 つにリクエストを振り向けます。
- その結果、その VM によって、ユーザーがリクエストしたコンテンツが配信されます。
始める前に
設定が前提条件を満たしていることを確認します。
SSL 証明書リソースを設定する
次の説明に従って、SSL 証明書リソースを作成します。
Google マネージド証明書を使用することをおすすめします。
この例では、SSL 証明書リソース www-ssl-cert
をすでに利用していることを前提としています。
権限を設定する
このガイドの手順を完了するには、プロジェクト内に Compute Engine インスタンス、ファイアウォール ルール、予約済み IP アドレスを作成する権限が必要になります。プロジェクトのオーナーまたは編集者ロール、あるいは次に示す Compute Engine IAM ロールが必要です。
タスク | 必要なロール |
---|---|
インスタンスの作成 | インスタンス管理者 |
ファイアウォール ルールの追加と削除 | セキュリティ管理者 |
ロードバランサのコンポーネントの作成 | ネットワーク管理者 |
プロジェクトの作成(省略可) | プロジェクト作成者 |
詳細については、次のガイドをご覧ください。
マネージド インスタンス グループを作成する
Compute Engine バックエンドでロードバランサを設定するには、VM がインスタンス グループに属している必要があります。このガイドでは、Apache が稼働している Linux VM からなるマネージド インスタンス グループを作成し、負荷分散を設定する方法について説明します。
このマネージド インスタンス グループの VM で外部 HTTPS ロードバランサのバックエンド サーバーを実行します。わかりやすく説明するために、バックエンド サーバーはそれぞれ独自のホスト名を提供します。Console
- Google Cloud Console で、[インスタンス グループ] ページに移動します。
- [インスタンス グループを作成] をクリックします。
- 左側で [新しいマネージド インスタンス グループ] を選択します。
- [名前] に「
lb-backend-example
」と入力します。 - [ロケーション] で [シングルゾーン] を選択します。
- [リージョン] で、使用するリージョンを選択します。この例では
us-east1
を使用しています。 - [ゾーン] で us-east1-b を選択します。
- [インスタンス テンプレート] で [新しいインスタンス テンプレートを作成] を選択します。
- [名前] に「
lb-backend-template
」と入力します。 - [ブートディスク] が Debian GNU/Linux 9 (stretch) などの Debian イメージに設定されていることを確認します。これらの手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。 [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] の [管理] タブで、次のスクリプトを [起動スクリプト] フィールドに挿入します。
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html
[ネットワーキング] タブで、ネットワーク タグを追加します。
allow-health-check
[保存して次へ] をクリックします。
[自動スケーリング モード] で [自動スケーリングしない] を選択します。
[インスタンスの数] に「
2
」と入力します。新しいインスタンス グループを作成するには、[作成] をクリックします。
gcloud
テンプレートを作成します。
gcloud compute instance-templates create lb-backend-template \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-9 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
そのテンプレートに基づいてマネージド インスタンス グループを作成します。
gcloud compute instance-groups managed create lb-backend-example \ --template=lb-backend-template --size=2 --zone=us-east1-b
インスタンス グループへの名前付きポートの追加
インスタンス グループに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。負荷分散サービスが構成されると、名前を指定したポートにトラフィックが転送されます。
Console
- Google Cloud Console で、[インスタンス グループ] ページに移動します。
- インスタンス グループの名前(この例では
lb-backend-example
)をクリックし、[グループを編集] をクリックします。 - [ポート名のマッピングを指定する] をクリックします。
- [項目を追加] をクリックします。
- ポート名に「
http
」と入力します。ポート番号に「80
」と入力します。 - [保存] をクリックします。
gcloud
gcloud compute instance-groups
set-named-ports
コマンドを使用します。
gcloud compute instance-groups set-named-ports lb-backend-example \ --named-ports http:80 \ --zone us-east1-b
ファイアウォール ルールの構成
この例では、ファイアウォール ルール fw-allow-health-check
を作成します。これは Google Cloud ヘルスチェック システム(130.211.0.0/22
と 35.191.0.0/16
)からのトラフィックを許可する上り(内向き)ルールです。この例では、ターゲットタグ allow-health-check
を使用して VM が識別されます。
Console
- Google Cloud Console で [ファイアウォール] ページに移動します。
- [ファイアウォール ルールを作成] をクリックして、2 つ目のファイアウォール ルールを作成します。
- [名前] に「
fw-allow-health-check
」と入力します。 - [ネットワーク] で Default を選択します。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
allow-health-check
」を入力します。 - [ソースフィルタ] を IP ranges に設定します。
- [ソース IP の範囲] を
130.211.0.0/22
と35.191.0.0/16
に設定します。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
- [tcp] チェックボックスをオンにし、ポート番号に「
80
」と入力します。 - [作成] をクリックします。
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
外部 IP アドレスの予約
インスタンスが稼働し始めたので、次にロードバランサにユーザーが接続する際に使用するグローバル静的外部 IP アドレスを設定します。
Console
- Google Cloud Console で、[外部 IP アドレス] ページに移動します。
- IPv4 アドレスを予約するには、[静的アドレスを予約] をクリックします。
- [名前] に「
lb-ipv4-1
」と入力します。 - [ネットワーク サービス階層] に [プレミアム] を設定します。
- [IP バージョン] を IPv4 に設定します。
- [タイプ] を [グローバル] に設定します。
- [予約] をクリックします。
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --global
予約されている IPv4 アドレスをメモします。
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
ロードバランサの設定
この例では、クライアントとロードバランサの間で HTTPS を使用しているため、プロキシを構成する SSL 証明書リソースが 1 つ以上必要になります。Google マネージド証明書を使用することをおすすめします。Console
-
Google Cloud Console で、[負荷分散] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
- [インターネットから自分の VM へ] をオンにし、[続行] をクリックします。
- ロードバランサの名前に「
web-map-https
」を入力します。 - [バックエンドの構成] をクリックします。
- [バックエンド サービスとバックエンド バケットの作成または選択] で [バックエンド サービス] > [バックエンド サービスを作成] の順に選択します。
- バックエンド サービスの名前(
web-backend-service
など)を追加します。 - [プロトコル] で、HTTP を選択します。
- [名前付きポート] に「
http
」と入力します。 - [バックエンド] > [新しいバックエンド] > [インスタンス グループ] で、インスタンス グループ
lb-backend-example
を選択します。 - [ポート番号] に「
80
」と入力します。 - 他のデフォルト設定は残します。
- [ヘルスチェック] で [ヘルスチェックを作成] を選択し、ヘルスチェックの名前(
http-basic-check
など)を追加します。 - プロトコルを HTTP に設定し、[保存して次へ] をクリックします。
- 他のデフォルト設定は残します。
- [作成] をクリックします。
- [ホストとパスのルール] で、デフォルト設定をそのまま使用します。
- [フロントエンド構成] で、次の値を使用します。
- [プロトコル] を HTTPS に設定します。
- [IP アドレス] を前の手順で作成した
lb-ipv4-1
に設定します。 - [ポート] を 443 に設定し、HTTPS トラフィックを許可します。
- [証明書] プルダウン リストをクリックし、プライマリ SSL 証明書を選択します。
- [完了] をクリックします。
- [確認と完了] をクリックします。
- ロードバランサの構成が完了したら、[作成] をクリックします。
- ロードバランサの作成が完了するまで待ちます。
- ロードバランサの名前をクリックします。
- [ロードバランサの詳細] 画面で、ロードバランサの IP: ポートをメモします。
gcloud
- ヘルスチェックを作成します。
gcloud compute health-checks create http http-basic-check \ --port 80
- バックエンド サービスを作成します。
gcloud compute backend-services create web-backend-service \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
- インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
gcloud compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=us-east1-b \ --global
- デフォルトのバックエンド サービスに受信リクエストをルーティングする URL マップを作成します。
gcloud compute url-maps create web-map-https \ --default-service web-backend-service
- まだ作成していない場合は、次に示すようにグローバル SSL 証明書リソースを作成します。
次の例では、
certificate-file
という証明書ファイルとprivate-key-file
という秘密鍵ファイルがあることを前提としています。この例では、www-ssl-cert
という SSL 証明書リソースを作成します。gcloud compute ssl-certificates create www-ssl-cert \ --certificate=certificate-file \ --private-key=private-key-file \ --global
- URL マップにリクエストをルーティングするターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS 負荷分散用の SSL 証明書を保持するため、この手順で証明書も読み込みます。
gcloud compute target-https-proxies create https-lb-proxy \ --url-map web-map-https --ssl-certificates www-ssl-cert
- 受信リクエストをプロキシにルーティングするグローバル転送ルールを作成します。
gcloud compute forwarding-rules create https-content-rule \ --address=lb-ipv4-1\ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
インスタンスに送信されるトラフィックのテスト
負荷分散サービスが稼働中になったので、転送ルールへトラフィックを送信できます。また、各インスタンスに分散されるトラフィックを監視できます。
Console
Google Cloud Console で、[負荷分散] ページに移動します。
- 作成したロードバランサをクリックします。
- [バックエンド] セクションで、VM が正常であることを確認します。[正常] 列には、両方の VM が正常であること(
2/2
)が示されます。それ以外の場合は、最初にページを再読み込みしてみてください。VM が正常な状態であることが Cloud Console に表示されるまでに時間がかかる場合があります。数分経ってもバックエンドが正常に動作しない場合は、ファイアウォールの構成と、バックエンド VM に割り当てられているネットワーク タグを確認します。 - Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。
- Cloud Console でバックエンド インスタンスが正常であることを確認したら、
https://IP_ADDRESS
にアクセスし、ウェブブラウザでロードバランサをテストできます。IP_ADDRESS
は、ロードバランサの IP アドレスに置き換えます。 - テストに自己署名証明書を使用した場合、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。
- ページを提供したインスタンスの名前とそのゾーン(
Page served from: lb-backend-example-xxxx
など)を示すコンテンツを含むページがブラウザで表示されます。お使いのブラウザでこのページがレンダリングされない場合は、このガイドの構成設定を確認してください。
次のステップ
- GKE の IAP の有効化について読む。
- インスタンス グループの詳細を確認する。
- 負荷分散とスケーリングについて確認する。