設定 TCP 流量轉送

本指南說明如何使用 Cloud Service Mesh 將流量轉送至處理 TCP 流量的服務。這些服務包括資料庫、VOIP 服務和管理平台,這些服務預期會在特定通訊埠或通訊埠範圍接收 TCP 流量。

本指南適用於使用舊版 API 進行部署。如果您使用新的服務路由 API (預先發布版),請參閱使用 TCPRoute 資源設定 TCP 服務的 Cloud Service Mesh

這份指南可協助您:

  • 設定服務,代表接受用戶端 TCP 要求的相同後端或端點集合。
  • 設定轉送規則對應,讓 Cloud Service Mesh 設定的 Envoy Proxy 可以傳送 TCP 要求。

下圖分別顯示虛擬機器 (VM) 執行個體和網路端點群組 (NEG) 的 TCP 路由運作方式。

VM 的 Compute Engine API 資源。
為 TCP 和 Compute Engine 後端設定 Cloud Service Mesh (按一下可放大)


NEG 的 Compute Engine API 資源。
為 TCP 和 NEG 後端設定 Cloud Service Mesh (按一下可放大)

準備

  • 本指南以服務網格適用的 Envoy 準備指南為基礎,並假設您已瞭解 Cloud Service Mesh 的運作方式。
  • 本指南著重於設定 Cloud Service Mesh 時,與設定服務和 TCP 流量轉送路徑不同的部分。
  • 本指南假設您已設定代管執行個體群組 (MIG) 或 NEG。

設定負載平衡資源

請按照下列步驟設定負載平衡資源。

建立 TCP 健康狀態檢查

使用 VM 設定

如果您要設定 MIG,請使用下列指令建立全域健康狀態檢查,並將 PORT 替換為這項健康狀態檢查監控的 TCP 通訊埠編號:

gcloud compute health-checks create tcp td-vm-health-check \
    --global \
    --port=PORT

使用網路端點群組 (NEG) 設定

如果您要設定 NEG,請使用下列指令建立健康狀態檢查:

gcloud compute health-checks create tcp td-gke-health-check \
    --use-serving-port

如要進一步瞭解健康狀態檢查,請參閱下列文章:

建立健康狀態檢查的防火牆規則

這項規則可讓 Google Cloud的健康狀態檢查工具連線至後端。

gcloud

gcloud compute firewall-rules create fw-allow-health-checks \
  --action=ALLOW \
  --direction=INGRESS \
  --source-ranges=35.191.0.0/16,130.211.0.0/22 \
  --target-tags=TAGS \
  --rules=tcp:80

如要進一步瞭解健康狀態檢查的防火牆規則,請參閱下列文章:

為 TCP 後端建立後端服務

使用 Cloud Service Mesh 設定 TCP 的後端服務時,與設定 HTTP 的方式略有不同。下列步驟會擷取這些差異。

使用 VM 設定

如果您要設定 MIG,請使用下列指令建立後端服務並新增健康狀態檢查:

 gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --health-checks=td-vm-health-check \
     --protocol=TCP \
     --global-health-checks

設定後端服務的最後一個步驟是新增後端。 由於這是標準的 Cloud Service Mesh 設定步驟 (換句話說,與 TCP 型服務無關),因此這裡不會顯示。詳情請參閱 Compute Engine VM 設定指南,瞭解如何使用自動 Envoy 部署功能建立後端服務

使用網路端點群組 (NEG) 設定

如果您要設定 NEG,請使用下列指令建立後端服務,並將健康狀態檢查與後端服務建立關聯:

gcloud compute backend-services create td-gke-service \
    --global \
    --health-checks=td-gke-health-check \
    --protocol=TCP \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED

設定後端服務的最後一個步驟是新增後端群組。由於這是標準的 Cloud Service Mesh 設定步驟 (換句話說,與 TCP 型服務無關),因此這裡不會顯示。詳情請參閱「建立後端服務」一文,瞭解如何設定 GKE Pod 並自動注入 Envoy。

為以 TCP 為基礎的後端服務設定路由

在本節中,您將建立通用目標 TCP proxy 和通用轉送規則。這些資源可讓應用程式將流量傳送至新建立後端服務的後端。

請考量下列事項:

  • 轉送規則必須採用 INTERNAL_SELF_MANAGED 負載平衡機制。
  • 您在轉送規則中設定的虛擬 IP 位址 (VIP) 和通訊埠,就是應用程式將流量傳送至 TCP 服務時使用的 VIP 和通訊埠。您可以從任一子網路選擇 VIP。 Cloud Service Mesh 會使用這個 VIP 和通訊埠,將用戶端要求與特定後端服務相符。

    如要瞭解用戶端要求如何與後端服務相符,請參閱服務探索

gcloud

  1. 使用下列指令建立目標 TCP Proxy,並將 BACKEND_SERVICE 替換為在上一個步驟中建立的後端服務名稱。在下列範例中,我們使用 td-tcp-proxy 做為目標 TCP Proxy 的名稱,但您可以選擇符合需求的名稱。

    gcloud compute target-tcp-proxies create td-tcp-proxy \
       --backend-service=BACKEND_SERVICE
    
  2. 建立轉送規則。轉送規則會指定 VIP 和通訊埠,用於將用戶端要求與特定後端服務相符。詳情請參閱 gcloud 指令參考資料中的 gcloud compute forwarding-rules create

    gcloud compute forwarding-rules create td-tcp-forwarding-rule \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --address=VIP\
        --target-tcp-proxy=td-tcp-proxy \
        --ports=PORT \
        --network=default
    

此時,Cloud Service Mesh 已設定為後端間轉寄規矩所指定的 VIP 進行負載平衡。

限制

如果您使用 TCP 流量轉送,就無法設定 Google Cloud Armor 安全性政策。

疑難排解

如果應用程式嘗試將要求傳送至以 TCP 為基礎的服務,請執行下列操作:

  • 確認 TCP 健康狀態檢查通訊埠與 TCP 應用程式預期接收健康狀態檢查流量的通訊埠相符。
  • 確認後端服務的通訊埠名稱與執行個體群組中指定的名稱相符。

後續步驟