Cloud Service Mesh 的隔离

本页面介绍如何通过创建隔离配置,为后端服务的服务网格实现更好的请求隔离。

此功能可为服务的后端提供额外的隔离支持,以防止跨区域溢出。

默认情况下,Cloud Service Mesh 使用 waterfall by region 算法来决定用户流量应路由到何处。Cloud Service Mesh 会使用此算法将流量路由到最近的区域,直到后端达到其配置的容量上限。之后,流量将开始溢出到更远的区域。

借助此功能,系统会根据您的前端区域和隔离配置,将流量限制在最近的区域或本地区域,即使最近的区域容量不足,流量也不会溢出。这有助于防范潜在的级联故障,并让可能的服务中断仅在发生故障的单一区域内发生。除此之外,您仍需在全球级管理服务配置。

隔离示意图

是否使用此功能取决于您的实际应用场景,您应在使用此功能前仔细考虑以下事项:

  • 如果某个区域中的后端过载,Cloud Service Mesh 仍可能会向这些后端发送额外的流量,即使其他区域中的后端可以处理流量也是如此。这意味着,各区域因流量增加而过载的可能性增大,因此您需要相应地制定应对计划。
  • 您的流量仍通过全球控制平面进行路由。这意味着,仍有可能出现跨多个区域的全球协调故障。
  • 此功能通过 serviceLbPolicy 资源进行配置。所有限制仍然适用。
  • 严格隔离模式下,如果同一区域中没有能够处理流量的后端,则请求会失败。

应用此功能后,有以下两种情况:

最近隔离

最近区域隔离是指将与后端在同一区域的前端仅隔离到该区域中。如果本地位置没有可用的后端,则该前端会连接到后端区域,同时优化网络延迟时间。

最近隔离示意图

严格隔离

严格区域隔离是指前端位置只能访问本地区域内的后端。如果本地区域中没有能够处理流量的后端,前端将丢弃其所有流量。

严格隔离示意图

启用隔离

gcloud

执行以下步骤,使用 Google Cloud CLI 创建隔离配置。

  1. 运行以下命令以创建 serviceLbPolicy

    gcloud network-services service-lb-policies create my-isolation-policy \
        --isolation-config-granularity=REGION \
        --isolation-config-mode=ISOLATION_MODE \
        --location=global
    

    ISOLATION_MODE 替换为以下某个选项:

    1. 最近:流量会发送到最近的区域。
    2. 严格:如果前端所在的区域中没有能够处理流量的后端,则流量会被丢弃。

    如果未明确指定,则默认值为最近。请注意,只有在同时设置了 --isolation-granularity 标志的情况下,您才能指定此字段。

    或者,如果您有现有政策,也可以使用以下命令更新该政策:

    gcloud network-services service-lb-policies update POLICY_NAME \
        --isolation-config-granularity=REGION \
        --isolation-config-mode=ISOLATION_MODE \
        --location=global
    

    POLICY_NAME 替换为现有政策的名称。

  2. 创建或更新 serviceLbPolicy 资源后,将其与 backendService 资源相关联:

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
      ‐‐service-lb-policy POLICY_URL
    

    BACKEND_SERVICE_NAME 替换为您的后端服务的名称。

停用隔离

如要停用此功能,有如下两种方法:

  1. isolationConfigs 设置为未指定。
  2. 如果该功能是您通过 ServiceLbPolicy 政策启用的唯一功能,从服务中移除该政策即可

isolationConfigs 设置为未指定

运行以下命令以将 isolationConfigs 设置为未指定:

gcloud network-services service-lb-policies update my-isolation-policy \
  --isolation-config-granularity=unspecified \
  --isolation-config-mode=unspecified \
  --location=global

从服务中移除 ServiceLbPolicy

运行以下命令以移除 ServiceLbPolicy

gcloud network-services service-lb-policies delete my-isolation-policy --location=global

支持服务、诊断及问题排查

本部分介绍启用此功能后可能会出现的问题。

后端过载

此功能提供隔离支持,即便本地区域容量已满,流量也不会转移到较远的区域。因此,如果启用此功能,您的部分后端可能会过载。如果您不希望出现此行为,请考虑关闭此功能。您也可以考虑启用自动扩缩,以便更好地应对后端过载问题。

流量已转移

此功能可防止因容量不足而导致的流量溢出。因此,如果您在启用此功能之前后端已过载,则流量可能已转移到较远的区域。在这种情况下,启用此功能可能会导致这些流量转移回来。

流量未转移

此功能可防止因容量不足而导致的流量溢出。因此,如果您在启用此功能之前后端未过载,则最近的区域很可能能够处理所有流量。在这种情况下,启用此功能在短期内可能不会导致流量转移。

在向区域添加后端或从区域移除后端后,流量发生了转移

启用此功能后,如果向某个区域添加新的后端,流量可能会发生转移。这是预期行为,因为 Cloud Service Mesh 会尝试将流量路由到这些后端,以优化整体网络延迟时间。同样,当最后一批后端被移除时,Cloud Service Mesh 将开始向远程区域发送流量。这也是预期行为。

请求失败

如果启用了严格隔离模式,但前端所在区域中没有能够处理流量的后端,则流量预计会被丢弃。如果这不是预期行为,请确保您在希望发送流量的每个区域中都有后端。