設定 TCP 服務

本指南說明如何設定 Cloud Service Mesh,以便使用 TCP 服務和 TCPRoute 資源。

搭配 TCP 服務和 TCPRoute 的 Cloud Service Mesh 與搭配 HTTP 服務的 Envoy 附屬 Proxy 設定類似。例外狀況是,後端服務提供 TCP 服務,且路由是根據 TCP/IP 參數而非 HTTP 通訊協定。

含有 TCPRoute 資源的 Mesh 資源
Mesh 資源與 TCPRoute 資源 (按一下即可放大)

事前準備

請務必完成「準備使用 Envoy 和無 Proxy 工作負載設定」一文中所述的工作。

設定 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 服務。

  1. 建立 Compute Engine VM 執行個體範本,並在 10000 連接埠上建立測試服務。

    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. 建立執行個體範本,然後使用 Envoy 建立與 Cloud Service Mesh 連線的 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 服務傳回。

後續步驟

  • 如要瞭解如何列出與 MeshGateway 資源相關聯的路線資源,請參閱「列出 Route 資源」。