1. はじめに
ハイブリッド戦略は、変化する市場の需要に適応し、アプリケーションを段階的にモダナイズするための実際的なソリューションです。Google Cloud の外部および内部 HTTP(S) ロードバランサのハイブリッド サポートは、オンプレミスや他のクラウドに存在するバックエンドに Cloud Load Balancing を拡張するものであり、ハイブリッド戦略を実現するための重要な要素です。これは、最新のクラウドベースのソリューションに移行するために一時的なものであったり、組織の IT インフラストラクチャの恒久的な設備であったりする場合があるでしょう。
このラボでは、外部 HTTP(S) グローバル ロードバランサからアクセス可能な 2 つの仮想マシンを使用して、ネットワーク エンドポイント グループ(NEG)を作成する方法を学びます。ラボの NEG は GCP 内にありますが、パブリック リソースやオンプレミス リソースとの通信に IP ネットワーク到達性がある場合も同じ手順が使用されます。
学習内容
- カスタム VPC を作成する
- ネットワーク エンドポイント グループ(NEG)として使用する 2 つの仮想マシン(VM)を作成する
- ハイブリッド ロードバランサ、バックエンド サービス、関連するヘルスチェックを作成する
- ロードバランサへのアクセスを許可するファイアウォール ルールを作成する
- インターネットからパッケージを更新できるように Cloud Router と NAT が作成されます
- ネットワーク エンドポイント グループのネットワーク到達性を検証する
必要なもの
- ロードバランサに関する知識
セルフペース型の環境設定
- Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用しますGmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- [プロジェクト名] は、このプロジェクトの個人識別子です。命名規則に従っていれば、自由に使用でき、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトで一意である必要があり、不変です(一度設定すると変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は
PROJECT_ID
で識別されます)。気に入らない場合は、別のランダムな ID を生成するか、独自の ID が使用可能かどうかを確認します。その後は 「固定」しますプロジェクトが作成されます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、$300 USD 分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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 が考慮するように指定します。ロード バランシングに使用する近接ベースのロード バランシング測定では、構成したゾーンを相互接続のアタッチメント/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 アドレスに関連付けます。各除外キーワード、on-prem-neg-1 & on-prem-neg-2.
Cloud Shell で on-prem-neg-1 を関連付けて、x.x.x.x を自分の特定した IP に更新します。
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 を関連付けて、x.x.x.x を自分の特定した IP に更新します。
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) ロード バランシングを特定して [構成を開始] をクリックする
[インターネットから自分の VM へ] を選択します。以下のスクリーンショットに従い、VM への公開アクセスを許可します。
「xlb」と入力してください先ほど作成したバックエンド サービス「on-prem-backend-service」を選択します。その後「OK」記載されているスクリーンショットに
[フロントエンドの構成] を選択し、名前を「xlb-fe」に変更します。先ほど作成した静的 IPv4 アドレスを選択し、提供されたスクリーンショットをミラーリングしてください
[確認と完了] を選択表示されたスクリーンショットと同じにして、[Create] を選択します。
バックエンドの健全性の検証
Cloud コンソールで、バックエンド「xlb」が正常な、緑(提供されたスクリーンショットを参照)
9. NEG がインターネットから到達可能であることを確認する
ロードバランサの作成時に使用した外部静的 IP アドレスが、ネットワーク エンドポイントのフロントエンド IP になったことを思い出してください。最終テストを実行する前に、IP アドレスの検証を行います。
Cloud Shell から
gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
出力(実際の IP アドレスは異なります)
Cloudshell からの出力
$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress: IPAddress: 34.96.103.132
グローバル ロードバランサのフロントエンドの IP アドレスを使用して、ネットワーク エンドポイントのバックエンドにアクセスできます。この Codelab ではエンドポイントは 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-prem-backend service] をオンにする&‘on-premise-health-check'[削除] を選択します。
Cloud コンソール UI で、[Compute Engine] → [ネットワーク エンドポイント グループ] に移動します。選択したら、[on-prem-neg-1] チェックボックスをオンにする&‘on-prem-neg-2'[削除] を選択します。
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