外部 HTTP(s) ハイブリッド ロードバランサを使用してネットワーク エンドポイント グループに到達する

1. はじめに

ハイブリッド戦略は、変化する市場の要求に応じて、アプリケーションを段階的にモダナイズするための実際的なソリューションです。Google Cloud の外部および内部 HTTP(S) ロードバランサのハイブリッド サポートにより、クラウド ロード バランシングがオンプレミスや他のクラウドにあるバックエンドに拡張されます。これは、ハイブリッド戦略を実現するための重要な要素です。これは、最新のクラウドベースのソリューションに移行する際の一時的なデプロイメントの場合もあれば、組織の IT インフラストラクチャの恒久的な設備の場合もあります。

3312e69c63b02f73.png

このラボでは、外部 HTTP(S) グローバル ロードバランサからアクセス可能な 2 つの仮想マシンを使用して、ネットワーク エンドポイント グループ(NEG)を作成する方法を学習します。ラボの NEG は GCP 内にありますが、同じ手順を使用して、IP 到達可能性のあるパブリック リソースまたはオンプレミス リソースと通信します。

学習内容

  • カスタム VPC を作成する
  • ネットワーク エンドポイント グループ(NEG)として使用される 2 つの仮想マシン(VM)を作成する
  • ハイブリッド ロードバランサ、バックエンド サービス、関連するヘルスチェックを作成する
  • ロードバランサへのアクセスを許可するファイアウォール ルールを作成する
  • インターネットからのパッケージ更新を許可するために、Cloud Router と NAT が作成されます
  • ネットワーク エンドポイント グループの到達可能性を検証する

必要なもの

  • ロードバランサの知識

セルフペース型の環境設定

  1. Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用しますGmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • プロジェクト名は、このプロジェクトの個人識別子です。命名規則に従っていれば、任意の名前を使用でき、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成するか、独自の ID を試して使用可能かどうかを確認できます。プロジェクトの作成後、ID は「フリーズ」されます。
  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

bce75f34b2c53987.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

f6ef2b5f13479f3a.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

2. 始める前に

Cloud Shell で、プロジェクト ID が設定されていることを確認します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID
echo $projectid

3. 新しいカスタムモードの VPC ネットワークを作成する

このタスクでは、ネットワークの基盤となる Virtual Private Cloud(VPC)を作成します。

VPC ネットワーク

Cloud Shell から

gcloud compute networks create hybrid-network-lb --subnet-mode custom

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1

Cloud NAT インスタンスを作成する

ハイブリッド ネットワーキングの要件ではありませんが、コンピューティング インスタンスはアプリケーションとアップデートをダウンロードするためにインターネット接続が必要です。

このタスクでは、VM インスタンスへのインターネット接続を可能にする Cloud Router と NAT インスタンスを作成します。

Cloud Router の作成

Cloud Shell から

gcloud compute routers create crnat --network hybrid-network-lb --region us-west1

Cloud NAT を作成する

Cloud Shell から

gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1

4. 2 つの VM インスタンスを作成する

このタスクでは、Apache を実行する 2 つの VM インスタンスを作成します。この VM インスタンスは、ラボの後半でネットワーク エンドポイント グループ(NEG)になります。

Cloud Shell から、最初オンプレミス インスタンス on-prem-neg-1 を作成します。

gcloud compute instances create on-prem-neg-1 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

Cloud Shell から、最初オンプレミス インスタンス on-prem-neg-2 を作成します。

gcloud compute instances create on-prem-neg-2 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

5. オンプレミス エンドポイントを含む NEG を作成します。

まず、on-prem-neg-1 と on-prem-neg-2 という名前の NEG を作成します。また、ルーティングとロード バランシングの目的で、これらのエンドポイントが us-west1-a GCP ゾーンにあることを LB が考慮するように指定します。構成されたゾーンは、ロード バランシングに使用される近接ベースのロード バランシング測定の Interconnect アタッチメント/VPN ゲートウェイのリージョンに関連付けられたゾーンに対応していることをおすすめします。

Cloud Shell から on-prem-neg-1 を作成する

gcloud compute network-endpoint-groups create on-prem-neg-1 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

Cloud Shell から on-prem-neg-2 を作成する

gcloud compute network-endpoint-groups create on-prem-neg-2 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

この Codelab では、ネットワーク エンドポイント グループは GCP で Apache を実行している GCE インスタンスです。また、オンプレミスまたはインターネット エンドポイントをネットワーク エンドポイントとして指定することもできます。

Cloud Shell から GCE IP アドレスを特定する

gcloud compute instances list | grep -i on-prem

ネットワーク エンドポイント グループを、前の手順で特定した GCE インスタンスの IP アドレスに関連付けます。各 NEG の場合: on-prem-neg-1 & on-prem-neg-2.

Cloud Shell から on-prem-neg-1 を関連付け、特定した IP で x.x.x.x を更新します。

gcloud compute network-endpoint-groups update on-prem-neg-1 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

Cloud Shell から on-prem-neg-2 を関連付け、特定した IP で x.x.x.x を更新します。

gcloud compute network-endpoint-groups update on-prem-neg-2 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

6. http ヘルスチェック、バックエンド サービス、ファイアウォールを作成します。

このステップでは、on-prem-backend-service という名前のグローバル バックエンド サービスを作成します。このバックエンド サービスは、データプレーンが NEG にトラフィックを送信する方法を定義します。

まず、on-prem-health-check という名前のヘルスチェックを作成して、この NEG に属するエンドポイント(オンプレミス エンドポイント)の健全性をモニタリングします。

Cloud Shell から

gcloud compute health-checks create http on-prem-health-check

on-prem-backend-service というバックエンド サービスを作成し、ヘルスチェックに関連付けます。

Cloud Shell から

gcloud compute backend-services create on-prem-backend-service \
    --global \
    --load-balancing-scheme=EXTERNAL \
    --health-checks on-prem-health-check

HTTP(S) 外部ロードバランサとバックエンドは、35.191.0.0/16 サブネットと 130.211.0.0/22 サブネットから発信されるヘルスチェックを実行します。したがって、ロードバランサからバックエンドへのルーティングを許可するファイアウォール ルールが必要です。

Cloud Shell から

gcloud compute firewall-rules create fw-allow-health-check \
    --network=hybrid-network-lb \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

7. NEG とバックエンド サービスを関連付ける

このバックエンド サービスに on-prem-neg-1 NEG を追加します。

Cloud Shell から

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-1 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

このバックエンド サービスに on-prem-neg-2 NEG を追加します。

Cloud Shell から

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-2 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

ネットワーク エンドポイントへのアクセスに使用する IPv4 静的 IP アドレスを予約する

Cloud Shell から

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

これで CLI 構成は完了です。Cloud コンソールから構成を完了しましょう。

8. 外部 HTTP ロードバランサを作成してバックエンド サービスを関連付ける

Cloud コンソールで、[ロード バランシング] に移動し、[ロードバランサの作成] を選択します。

HTTP(S) ロード バランシングを特定し、[構成を開始] をクリックします。

70ccd168957e89d9.png

下のスクリーンショットのように [インターネットから自分の VM へ] を選択して、VM への一般公開アクセスを許可します。

a55cd31dbeadfecc.png

ロードバランサの名前として「xlb」を指定し、前に作成したバックエンド サービス「on-prem-backend-service」を選択して、提供されたスクリーンショットに従って [OK] をクリックします。

f1589df43bf9e3e8.png

[フロントエンド構成] を選択し、名前「xlb-fe」を更新して、以前に作成した静的 IPv4 アドレスを選択します。提供されたスクリーンショット b47cd48c7c1ccfc3.png をミラーリングしてください。

提供されたスクリーンショットと一致するように [Review and finalize](確認して確定)を選択し、[作成] を選択します。

bfa39f7dc3ad91e1.png

バックエンドの健全性の検証

Cloud コンソールで、提供されたスクリーンショットのように、バックエンド「xlb」が正常(緑色)であることを確認します。

131bbfc955d6166c.png

9. インターネットから NEG にアクセスできることを検証する

ロードバランサの作成時に使用した外部静的 IP アドレスが、ネットワーク エンドポイントのフロントエンド IP になっています。最終テストを実行する前に、IP アドレスの検証を行いましょう。

Cloud Shell から

gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:

出力(実際の IP アドレスは異なります)

Cloud Shell の出力

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

グローバル ロードバランサのフロントエンド IP アドレスを使用して、ネットワーク エンドポイントのバックエンドにアクセスできます。このコードラボでは、エンドポイントは GCE インスタンスですが、オンプレミス エンドポイントなどでも使用できます。

ローカル ワークステーションからターミナルを起動し、ロードバランサの IP アドレスに対して curl を実行します。

ワークステーションから、フロントエンドの IP アドレスに対して curl を実行します。200 OK と、neg インスタンス名とリージョンで構成されるページの詳細を確認します。

myworkstation$ curl -v 34.96.103.132

* Trying 34.96.103.132...

* TCP_NODELAY set

* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)

> GET / HTTP/1.1

> Host: 34.96.103.132

> User-Agent: curl/7.64.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Tue, 10 Aug 2021 01:21:54 GMT

< Server: Apache/2.4.25 (Debian)

< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT

< ETag: "24-5c929ae7384f4"

< Accept-Ranges: bytes

< Content-Length: 36

< Content-Type: text/html

< Via: 1.1 google

<

Page on on-prem-neg-2 in us-west1-a

* Connection #0 to host 34.96.103.132 left intact

* Closing connection 0

お疲れさまでした。これで、NEG を使用して L7 ハイブリッド ロードバランサを正常にデプロイできました。

以上で、この Codelab は完了です。

学習した内容

  • カスタム VPC を作成する
  • ネットワーク エンドポイント グループ(NEG)として使用される 2 つの仮想マシン(VM)を作成する
  • ハイブリッド ロードバランサ、バックエンド サービス、関連するヘルスチェックを作成する
  • ロードバランサへのアクセスを許可するファイアウォール ルールを作成する
  • ネットワーク エンドポイント グループの到達可能性を検証する

10. クリーンアップ手順

Cloud コンソール UI で、xlb ロードバランサを特定してチェックを入れ、[ネットワーク サービス] → [ロード バランシング] で削除を選択します。選択したら、[on-premise-backend service] と [on-premise-health-check] をオンにして、[削除] を選択します。

53d7463fe354fe66.png

Cloud Console UI で、[Compute Engine] → [ネットワーク エンドポイント グループ] に移動します。選択したら、[on-prem-neg-1] と [on-prem-neg-2] をオンにして、[削除] を選択します。

4d8f04264b44d03c.png

Cloud Shell からラボ コンポーネントを削除する

gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet

gcloud compute routers delete crnat  --region us-west1 --quiet

gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet

gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet

gcloud compute firewall-rules delete fw-allow-health-check --quiet

gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet

gcloud compute networks delete hybrid-network-lb --quiet

gcloud compute addresses delete hybrid-lb-ip --global --quiet