设置 TCP 流量路由

本指南演示了如何使用 Cloud Service Mesh 将流量路由到处理 TCP 流量的服务。这些服务包括数据库、VOIP 服务和管理平台,预计可以在特定端口或端口范围内接收 TCP 流量。

本指南适用于使用旧版 API 进行的部署。如果您使用的是预览版的新服务路由 API,请参阅使用 TCPRoute 资源为 TCP 服务设置 Cloud Service Mesh

使用本指南执行以下操作:

  • 设置代表一组相同后端或端点(接受来自客户端的 TCP 请求)的服务。
  • 设置路由规则映射,以便 Cloud Service Mesh 配置的 Envoy 代理可以发送 TCP 请求。

下图分别展示了 TCP 路由对虚拟机 (VM) 实例和网络端点组 (NEG) 的工作原理。

虚拟机的 Compute Engine API 资源。
为 TCP、Compute Engine 后端设置 Cloud Service Mesh(点击可放大)


适用于 NEG 的 Compute Engine API 资源。
为 TCP 和 NEG 后端设置 Cloud Service Mesh(点击可放大)

准备工作

  • 本指南以适用于服务网格的 Envoy 准备指南为基础,并假定您已基本了解 Cloud Service Mesh 的工作原理。
  • 本指南重点介绍在 TCP 流量配置服务和路由时 Cloud Service Mesh 设置的各个方面。
  • 本指南假定您已设置托管实例组 (MIG) 或 NEG。

配置负载平衡资源

按照以下步骤配置负载平衡资源。

创建 TCP 健康检查

使用虚拟机进行设置

如果您要配置 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 设置略有不同。以下步骤捕获了这些差异。

使用虚拟机进行设置

如果您要配置 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 虚拟机设置指南中的创建后端服务

使用 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 代理和全局转发规则。这些资源可让您的应用使用新创建的后端服务将流量发送到后端。

请考虑以下事项:

  • 您的转发规则必须具有负载平衡方案 INTERNAL_SELF_MANAGED
  • 您在转发规则中配置的虚拟 IP 地址 (VIP) 和端口是应用向 TCP 服务发送流量时使用的 VIP 和端口。您可以从某个子网中选择 VIP 地址。Cloud Service Mesh 使用此 VIP 和端口将客户端请求与特定后端服务相匹配。

    如需了解客户端请求如何与后端服务匹配,请参阅服务发现

gcloud

  1. 使用以下命令创建目标 TCP 代理;将 BACKEND_SERVICE 替换为上一步中创建的后端服务的名称。在以下示例中,我们使用 td-tcp-proxy 作为目标 TCP 代理的名称,但您可以选择满足需求的名称。

    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 应用预期接收健康检查流量的端口匹配。
  • 确认后端服务的端口名称与实例组中指定的名称一致。

后续步骤