HTTP サービスを使用した Envoy プロキシ用の Traffic Director の設定
このガイドでは、Envoy プロキシベースのサービス メッシュ、HTTP サービス、Mesh
および HTTPRoute
リソースを使用して Traffic Director を構成する方法について説明します。
HTTPRoute
~Mesh
リソース(クリックして拡大)次のガイドの前提条件を満たしていることを確認してください。
Mesh
リソースを構成する
サイドカーとして実行される Envoy プロキシは、Traffic Director からサービス ルーティング構成を受信します。Mesh
名は、サイドカー プロキシが Mesh
リソースに関連付けられた構成をリクエストするために使用するキーです。Traffic Director は、プロキシにルーティング 構成を提供します。サイドカー プロキシは、Route
リソースで構成されているホスト名やヘッダーなどのリクエスト パラメータに基づいて、正しいバックエンド サービスにトラフィックを転送します。
Mesh
リソース仕様を作成し、mesh.yaml
というファイルに保存します。name: sidecar-mesh interception_port: 15001
mesh.yaml
ファイルでポートを指定しない場合、インターセプト ポートはデフォルトで 15001
になります。
Mesh.yaml 仕様を使用して
Mesh
リソースを作成します。gcloud alpha network-services meshes import sidecar-mesh \ --source=mesh.yaml \ --location=global
Mesh
リソースが作成されると、Traffic Director は構成を提供する準備が整いますが、サービスがまだ定義されていないため、構成は空です。次のステップでは、サービスとアタッチメントを定義します。
HTTP サーバーを構成する
デモ用に、自動スケーリングされた VM を使用して、マネージド インスタンス グループをバックエンドとして使用するバックエンド サービスを作成します。VM は、ポート 80
で HTTP プロトコルを使用して hello world
フレーズを処理します。
ポート
80
でhelloworld
HTTP サービスを使用してインスタンス テンプレートを作成します。gcloud compute instance-templates create td-httpd-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=http-td-server \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
作成したテンプレートに基づいて、マネージド インスタンス グループを作成します。
gcloud compute instance-groups managed create http-td-mig-us-east1 \ --zone=${ZONE} \ --size=2 \ --template=td-httpd-vm-template
ヘルスチェックを作成する。
gcloud compute health-checks create http http-helloworld-health-check
ネットワーク内のインスタンスへの受信ヘルスチェック接続を許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create http-vm-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \ --target-tags=http-td-server \ --rules=tcp:80
INTERNAL_SELF_MANAGED
の負荷分散方式でグローバル バックエンド サービスを作成し、ヘルスチェックを追加します。gcloud compute backend-services create http-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-helloworld-health-check
マネージド インスタンス グループをバックエンド サービスに追加します。次の例では、以前に作成したマネージド インスタンス グループを使用します。マネージド インスタンス グループの VM により、作成したサンプル HTTP サービスが実行されます。
gcloud compute backend-services add-backend http-helloworld-service \ --instance-group=http-td-mig-us-east1 \ --instance-group-zone=${ZONE} \ --global
HTTPRoute
でルーティングを設定する
Mesh
リソースとサービスが設定されます。ホスト名をバックエンド サービスに関連付ける HTTPRoute リソースに接続します。
HTTPRoute
仕様を作成し、http_route.yaml
というファイルに保存します。name: helloworld-http-route hostnames: - helloworld-gce meshes: - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh rules: - action: destinations: - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
http_route.yaml
ファイルの仕様に従ってHTTPRoute
リソースを作成します。gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
これで、Traffic Director が HTTPRoute リソースで指定されたサービスのトラフィックをマネージド インスタンス グループ内の VM に対して負荷分散するように構成されました。
Envoy サイドカーを使用して HTTP クライアントを作成する
デプロイを確認するには、前に作成した Traffic Director 構成をリクエストする Envoy サイドカー プロキシを使用してクライアント VM を作成します。gcloud
コマンドの mesh
パラメータは、作成済みの Mesh
リソースを参照します。
インスタンス テンプレートを作成する。
gcloud beta compute instance-templates create td-vm-client-template \ --image-family=debian-10 \ --image-project=debian-cloud \ --service-proxy=enabled,mesh=sidecar-mesh
Traffic Director に接続されている Envoy プロキシを使用して VM を作成する。
gcloud compute instances create td-vm-client \ --zone=${ZONE} \ --source-instance-template td-vm-client-template
VM にログインします。
gcloud compute ssh td-vm-client
curl
コマンドを実行して、テストサービスへの HTTP 接続を確認します。curl -H "Host: helloworld-gce" http://10.0.0.1/
このコマンドでは、マネージド インスタンス グループ内のいずれかの VM からレスポンスが返されます。そのホスト名がコンソールに出力されます。