設定 TCP 流量轉送

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

本指南適用於使用舊版 API 的部署作業。如果您使用的是新版服務路由 API (目前處於預覽階段),請參閱「使用 TCPRoute 資源為 TCP 服務設定 Cloud Service Mesh」一文。

本指南可協助您:

  • 設定代表一組相同後端或端點的服務,這些後端或端點會接受來自用戶端的 TCP 要求。
  • 設定轉送規則對應,讓 Cloud Service Mesh 設定的 Envoy 代理程式能夠傳送 TCP 要求。

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

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


非生產環境的 Compute Engine API 資源。
為 TCP、NEG 後端設定 Cloud Service Mesh (按一下可放大)

準備作業

  • 本指南以「Envoy 服務網格」準備指南為基礎,並假設您已對 Cloud Service Mesh 的運作方式有基本瞭解。
  • 本指南著重於說明在設定服務和 TCP 流量轉送時,Cloud Service Mesh 設定的不同之處。
  • 本指南假設您已設定代管執行個體群組 (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 為基礎的服務提供任何特定功能),因此不會顯示在這裡。如需更多資訊,請參閱使用自動 Envoy 部署的 Compute Engine VM 設定指南中的「建立後端服務」。

使用 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 為基礎的服務提供任何特定功能),因此不會在此顯示。如需更多資訊,請參閱自動 Envoy 注入功能的 GKE Pod 設定指南,瞭解如何建立後端服務

為以 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 為基礎的服務傳送要求,請執行下列操作:

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

後續步驟