HTTP サービスを使用した Envoy プロキシ用の Traffic Director の設定

このガイドでは、Envoy プロキシベースのサービス メッシュ、HTTP サービス、Mesh および HTTPRoute リソースを使用して Traffic Director を構成する方法について説明します。

HTTPRoute と Mesh リソースを使用する Envoy プロキシ
Envoy プロキシとHTTPRouteMeshリソース(クリックして拡大)

次のガイドの前提条件を満たしていることを確認してください。

Mesh リソースを構成する

サイドカーとして実行される Envoy プロキシは、Traffic Director からサービス ルーティング構成を受信します。Mesh 名は、サイドカー プロキシが Mesh リソースに関連付けられた構成をリクエストするために使用するキーです。Traffic Director は、プロキシにルーティング 構成を提供します。サイドカー プロキシは、Route リソースで構成されているホスト名やヘッダーなどのリクエスト パラメータに基づいて、正しいバックエンド サービスにトラフィックを転送します。

  1. Mesh リソース仕様を作成し、mesh.yaml というファイルに保存します。

    name: sidecar-mesh
    interception_port: 15001
    

mesh.yaml ファイルでポートを指定しない場合、インターセプト ポートはデフォルトで 15001 になります。

  1. 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 フレーズを処理します。

  1. ポート 80helloworld 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"
    
  2. 作成したテンプレートに基づいて、マネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create http-td-mig-us-east1 \
      --zone=${ZONE} \
      --size=2 \
      --template=td-httpd-vm-template
    
  3. ヘルスチェックを作成する。

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. ネットワーク内のインスタンスへの受信ヘルスチェック接続を許可するファイアウォール ルールを作成します。

    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
    
  5. 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
    
  6. マネージド インスタンス グループをバックエンド サービスに追加します。次の例では、以前に作成したマネージド インスタンス グループを使用します。マネージド インスタンス グループの 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 リソースに接続します。

  1. 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"
    
  2. 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 リソースを参照します。

  1. インスタンス テンプレートを作成する。

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh
    
  2. Traffic Director に接続されている Envoy プロキシを使用して VM を作成する。

    gcloud compute instances create td-vm-client \
      --zone=${ZONE} \
      --source-instance-template td-vm-client-template
    
  3. VM にログインします。

    gcloud compute ssh td-vm-client
    
  4. curl コマンドを実行して、テストサービスへの HTTP 接続を確認します。

    curl -H "Host: helloworld-gce" http://10.0.0.1/
    

このコマンドでは、マネージド インスタンス グループ内のいずれかの VM からレスポンスが返されます。そのホスト名がコンソールに出力されます。