设置 TCP 流量路由
本指南演示了如何使用 Cloud Service Mesh 将流量路由到处理 TCP 流量的服务。这些服务包括数据库、VOIP 服务和管理平台,预计可以在特定端口或端口范围内接收 TCP 流量。
本指南适用于使用旧版 API 进行的部署。如果您使用的是预览版的新服务路由 API,请参阅使用 TCPRoute
资源为 TCP 服务设置 Cloud Service Mesh。
使用本指南执行以下操作:
- 设置代表一组相同后端或端点(接受来自客户端的 TCP 请求)的服务。
- 设置路由规则映射,以便 Cloud Service Mesh 配置的 Envoy 代理可以发送 TCP 请求。
下图分别展示了 TCP 路由对虚拟机 (VM) 实例和网络端点组 (NEG) 的工作原理。
准备工作
- 本指南以适用于服务网格的 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
如需详细了解健康检查,请参阅以下内容:
- Cloud Load Balancing 文档中的创建健康检查
gcloud
命令参考中的gcloud compute health-checks create tcp
为健康检查创建防火墙规则
此规则允许 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
如需详细了解健康检查的防火墙规则,请参阅以下内容:
- Cloud Load Balancing 文档中的健康检查防火墙规则
gcloud
命令参考中的gcloud compute firewall-rules create
(包括TAGS
的指南)
为 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
使用以下命令创建目标 TCP 代理;将
BACKEND_SERVICE
替换为上一步中创建的后端服务的名称。在以下示例中,我们使用td-tcp-proxy
作为目标 TCP 代理的名称,但您可以选择满足需求的名称。gcloud compute target-tcp-proxies create td-tcp-proxy \ --backend-service=BACKEND_SERVICE
创建转发规则。 转发规则指定将客户端请求与特定后端服务匹配时使用的 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 应用预期接收健康检查流量的端口匹配。
- 确认后端服务的端口名称与实例组中指定的名称一致。
后续步骤
- 如需查看设置流程中的其他步骤,请参阅准备使用 Envoy 设置 Cloud Service Mesh。
- 如需查找常规 Cloud Service Mesh 问题排查信息,请参阅排查使用 Envoy 的部署的问题。