Service Extensions を使用すると、サポートされているアプリケーション ロードバランサは、データ処理パスからユーザーが管理するコールアウト バックエンド サービスにコールアウトを送信できます。これにより、アプリケーション ロードバランサは処理パスでカスタム ロジックを使用できます。このページでは、ユーザー管理のコールアウト バックエンド サービスを構成する方法について説明します。
アプリケーション ロードバランサの拡張機能の概要については、Cloud Load Balancing の拡張機能の概要をご覧ください。
始める前に
プロジェクトのオーナーまたは編集者ロール、あるいは次に示す Compute Engine IAM ロールがあることを確認します。
- インスタンスを作成する:
compute.instanceAdmin.v1 - Cloud Load Balancing コンポーネントを作成するには:
compute.networkAdmin
- インスタンスを作成する:
Compute Engine API と Network Services API を有効にします。
コンソール
Google Cloud コンソールで、[API へのアクセスの有効化] ページに移動します。
画面上の指示に沿って操作します。
gcloud
gcloud services enableコマンドを使用します。gcloud services enable compute.googleapis.com networkservices.googleapis.com
拡張機能をサポートするアプリケーション ロードバランサを作成して構成します。この例では、VM インスタンス グループのバックエンドを使用してリージョン内部アプリケーション ロードバランサを設定します。記載されているサンプル値を使用します。
ルート拡張機能のみ。追加のバックエンド サービスを設定し、URL マップを更新して、指定された条件に一致する HTTP ホストを持つすべてのトラフィックをこのバックエンド サービスにルーティングするホスト マッチャーを追加します。
コンソール
Google Cloud コンソールで [インスタンスの作成] ページに移動します。
次のサンプル値を指定します。
- 名前:
l7-ilb-backend2-vm - タグ:
allow-sshとload-balanced-backend - ゾーン:
us-west1-a - ネットワーク:
lb-network - サブネットワーク:
backend-subnet - 画像:
debian-11 - 家族:
debian-cloud [詳細オプション] > [管理] > [自動化]:
'#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl echo "Page served from second backend service" | tee /var/www/html/index.html systemctl restart apache2'
- 名前:
-
次のサンプル値を指定します。
- 名前:
l7-ilb-backend-service2-ig - ゾーン:
us-west1-a
- 名前:
-
[VM インスタンス] に
l7-ilb-backend2-vmを指定します。 Google Cloud コンソールで、[ロード バランシング] ページに移動します。
バックエンド サービスを作成してバックエンドを追加し、ロードバランサを更新します。
バックエンド サービスに、次のサンプル値を指定します。
- 名前:
l7-ilb-backend-service2 - プロトコル:
HTTP - [ヘルスチェック] > [名前]:
l7-ilb-basic-check - [ヘルスチェック] > [リージョン]:
us-west1
バックエンドには、次のサンプル値を指定します。
- インスタンス グループ:
l7-ilb-backend-service2-ig - バランス モード:
Utilization
- 名前:
バックエンド サービスの URL マップにホストマッチャーを追加します。
次のサンプル値を指定します。
- 名前:
l7-ilb-map - ホスト:
service-extensions.com - パス:
callouts - プロトコル:
HTTP - バックエンド:
l7-ilb-backend-service2
- 名前:
gcloud
VM インスタンスを作成します。次のサンプル値を使用して、
gcloud compute instances createコマンドを使用します。gcloud compute instances create l7-ilb-backend2-vm \ --zone=us-west1-a \ --network=lb-network \ --subnet=backend-subnet \ --tags=allow-ssh,load-balanced-backend \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl echo "Page served from second backend service" | tee /var/www/html/index.html systemctl restart apache2'非マネージド インスタンス グループを作成します。次のサンプル値を使用して、
gcloud compute instance-groups unmanaged createコマンドを使用します。gcloud compute instance-groups unmanaged create l7-ilb-backend-service2-ig \ --zone us-west1-a
新しい VM をインスタンス グループに追加します。次のサンプル値を使用して、
gcloud compute instance-groups unmanaged add-instancesコマンドを使用します。gcloud compute instance-groups unmanaged add-instances l7-ilb-backend-service2-ig \ --zone=us-west1-a \ --instances=l7-ilb-backend2-vm
バックエンド サービスを作成します。次のサンプル値を使用して、
gcloud compute backend-services createコマンドを使用します。gcloud compute backend-services create l7-ilb-backend-service2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --health-checks=l7-ilb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1
バックエンド サービスにバックエンドを追加します。次のサンプル値を使用して、
gcloud compute backend-services add-backendコマンドを使用します。gcloud compute backend-services add-backend l7-ilb-backend-service2 \ --balancing-mode=UTILIZATION \ --instance-group=l7-ilb-backend-service2-ig \ --instance-group-zone=us-west1-a \ --region=us-west1
バックエンド サービスの URL マップにホスト マッチャーを追加します。次のサンプル値を使用して、
gcloud compute url-maps add-path-matcherコマンドを使用します。gcloud compute url-maps add-path-matcher l7-ilb-map \ --path-matcher-name=callouts \ --default-service=l7-ilb-backend-service2 \ --new-hosts=service-extensions.com \ --region=us-west1
コールアウト バックエンド サービスを設定する
この例では、Envoy の ext_proc gRPC API を実装する基本的な Python ベースの拡張サーバーを使用できます。このサーバーを含む Docker コンテナは、 Google Cloudの Service Extensions GitHub リポジトリの us-docker.pkg.dev/service-extensions-samples/callouts/python-example-basic:main にあります。このリポジトリには、ヘッダーの変更や本文の変更などのタスクを行う ext_proc サーバーの Python と Go のサンプルが他にもいくつか含まれています。
コールアウト バックエンド サービスを作成して設定する手順は次のとおりです。
サンプル Python 拡張機能サーバーを実行しているコールアウト バックエンド サービスの仮想マシン(VM)インスタンスを作成します。
コンソール
Google Cloud コンソールで [インスタンスの作成] ページに移動します。
次のサンプル値を指定します。
- 名前:
callouts-vm - ゾーン:
us-west1-a - ネットワーク:
lb-network - サブネットワーク:
backend-subnet - タグ:
allow-sshとload-balanced-backend - コンテナ イメージ:
us-docker.pkg.dev/service-extensions-samples/callouts/python-example-basic:main
- 名前:
gcloud
コンテナ イメージを使用してインスタンスを作成します。次のサンプル値を使用して、
gcloud compute instances create-with-containerコマンドを使用します。gcloud compute instances create-with-container callouts-vm \ --container-image=us-docker.pkg.dev/service-extensions-samples/callouts/python-example-basic:main \ --network=lb-network \ --subnet=backend-subnet \ --zone=us-west1-a \ --tags=allow-ssh,load-balanced-backend
非マネージド インスタンス グループに VM を追加します。
コンソール
Google Cloud コンソールで、[インスタンス グループ] ページに移動します。
次のサンプル値を指定します。
- 名前:
callouts-ig - ゾーン:
us-west1-a
- 名前:
-
[ポート マッピング] に、ポート名と値(
http:80とgrpc:443)を指定します。 -
[VM インスタンス] に
callouts-vmを指定します。
gcloud
非マネージド インスタンス グループを作成します。次のサンプル値を使用して、
gcloud compute instance-groups unmanaged createコマンドを使用します。gcloud compute instance-groups unmanaged create callouts-ig \ --zone=us-west1-a
インスタンス グループのポートを設定します。次のサンプル値を使用して、
gcloud compute instance-groups unmanaged set-named-portsコマンドを使用します。gcloud compute instance-groups unmanaged set-named-ports callouts-ig \ --named-ports=http:80,grpc:443 \ --zone=us-west1-a
新しい VM インスタンスを非マネージド インスタンス グループに追加します。次のサンプル値を使用して、
gcloud compute instance-groups unmanaged add-instancesコマンドを使用します。gcloud compute instance-groups unmanaged add-instances callouts-ig \ --zone=us-west1-a \ --instances=callouts-vm
コールアウト バックエンド サービスを作成し、バックエンドを追加します。他のバックエンド サーバーと同様に、コールアウト サーバーでプロキシ トラフィックを許可するには、ファイアウォール ルールが必要になることがあります。
コンソール
HTTP/2 プロトコルを使用し、HTTP ヘルスチェックを行うコールアウト バックエンド サービスを作成します。
Google Cloud コンソールで、Cloud Load Balancing の [バックエンド] ページに移動します。
次のサンプル値を使用してリージョン バックエンド サービスを追加します。
- 名前:
l7-ilb-callout-service - リージョン:
us-west1 - ロードバランサのタイプ:
Regional external Application Load Balancer (EXTERNAL_MANAGED) - プロトコル:
HTTP2 - ポート名:
grpc - [ヘルスチェック] > [名前]:
callouts-hc - [ヘルスチェック] > [ポート番号]:
80 - Cloud Armor バックエンド セキュリティ ポリシー:
None
- 名前:
拡張サーバーを含むインスタンス グループをバックエンドとしてバックエンド サービスに追加します。インスタンス グループは
ext_procサービスを実行します。次のサンプル値を指定します。
- インスタンス グループ:
callouts-ig - バランス モード:
Utilization
- インスタンス グループ:
gcloud
インスタンスの基本的な HTTP ヘルスチェックを作成します。次のサンプル値を使用して、
gcloud compute health-checks create httpコマンドを使用します。gcloud compute health-checks create http callouts-hc \ --region=us-west1 \ --port=80
HTTP/2 プロトコルを使用するコールアウト バックエンド サービスを作成します。
gcloud compute backend-services createコマンドを使用します。gcloud compute backend-services create l7-ilb-callout-service \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP2 \ --port-name=grpc \ --health-checks=callouts-hc \ --health-checks-region=us-west1 \ --region=us-west1
拡張サーバーを含むインスタンス グループをバックエンドとしてバックエンド サービスに追加します。インスタンス グループは
ext_procサービスを実行します。次のサンプル値を使用して、gcloud compute backend-services add-backendコマンドを使用します。gcloud compute backend-services add-backend l7-ilb-callout-service \ --balancing-mode=UTILIZATION \ --instance-group=callouts-ig \ --instance-group-zone=us-west1-a \ --region=us-west1
バックエンド サービスを設定したら、ルート、認証、トラフィックの拡張機能を構成できます。