TCP サービスの設定

TCP サービスと TCPRoute を使用した Traffic Director は、HTTP サービスを使用した Envoy サイドカー プロキシの構成に似ています。例外は、バックエンド サービスが TCP サービスを提供し、ルーティングが HTTP プロトコルではなく TCP/IP パラメータに基づいていることです。

TCPRoute リソースを使用した Mesh リソース
TCPRoute リソースを使用した Mesh リソース(クリックして拡大)

始める前に

デプロイが、次のガイドに記載されている前提条件を満たしていることを確認します。

Mesh リソースを構成する

  1. mesh.yaml という名前のファイルで、mesh リソース仕様を作成します。

    name: sidecar-mesh
    
  2. mesh.yaml ファイルを使用して mesh リソースを作成します。

    gcloud network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

TCP サーバーを構成する

このセクションは新しい API に固有ではなく、既存のバックエンド サービス、ヘルスチェック、MIG リソースを使用します。

デモ用に、ポート 10000 でテスト TCP サービスを提供するマネージド インスタンス グループを使用して、自動スケーリングされた VM を持つバックエンド サービスを作成します。

  1. ポート 10000 にテストサービスを使用して、Compute Engine VM インスタンス テンプレートを作成します。

    gcloud compute instance-templates create tcp-td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=allow-health-checks \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y
    while true;
      do echo 'Hello from TCP service' | nc -l -s 0.0.0.0 -p 10000;
    done &"
    
  2. 作成したテンプレートに基づいて、マネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=ZONE \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. 作成したマネージド インスタンス グループの名前付きポートをポート 10000 に設定します。

    gcloud compute instance-groups set-named-ports tcp-td-mig-us-east1 
    --zone=ZONE
    --named-ports=tcp:10000

  4. ヘルスチェックを作成します。

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

    gcloud compute firewall-rules create tcp-vm-allow-health-checks \
       --network default \
       --action allow \
       --direction INGRESS \
       --source-ranges=35.191.0.0/16,130.211.0.0/22 \
       --target-tags allow-health-checks \
       --rules tcp:10000
    
  6. INTERNAL_SELF_MANAGED のロード バランシング方式でグローバル バックエンド サービスを作成し、バックエンド サービスにヘルスチェックを接続します。この例では、前に作成したサンプル TCP サービスを実行するマネージド インスタンス グループを使用します。

    gcloud compute backend-services create tcp-helloworld-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --protocol=TCP \
        --health-checks tcp-helloworld-health-check
    
  7. マネージド インスタンス グループをバックエンド サービスに追加します。

    gcloud compute backend-services add-backend tcp-helloworld-service \
      --instance-group tcp-td-mig-us-east1 \
      --instance-group-zone=ZONE \
      --global
    

TCPRoute でルーティングを設定する

このセクションでは、ルーティングを設定します。

  1. tcp_route.yaml という名前のファイルで、TcpRoute 仕様を作成します。

    $PROJECT_ID または $PROJECT_NUMBER を使用できます。

    name: helloworld-tcp-route
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
        destinations:
        - serviceName: projects/$PROJECT_NUMBER/locations/global/backendServices/tcp-helloworld-service
      matches:
      - address: '10.0.0.1/32'
        port: '10000'
    
  2. tcp_route.yaml 仕様を使用して、TcpRoute リソースを作成します。

    gcloud network-services tcp-routes import helloworld-tcp-route \
      --source=tcp-route.yaml \
      --location=global
    

Envoy サイドカーを使用して TCP クライアントを作成する

  1. インスタンス テンプレートを作成し、Traffic Director に接続された Envoy で VM を作成します。

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y"
    
    gcloud compute instances create td-vm-client \
      --zone=ZONE \
      --source-instance-template td-vm-client-template
    
  2. 作成した VM にログインします。

    gcloud compute ssh td-vm-client
    
  3. netcat ユーティリティを使用して、作成したテストサービスへの接続を確認します。

    echo 'Hi TCP Service' | nc 10.0.0.1 10000
    

テストサービスが「Hello from TCP service」というフレーズを返します。また、リモート VM で実行されている netcat サービスから返されたテキストも表示されるはずです。