Cloud Service Mesh 的隔离

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

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

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

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

隔离示意图

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

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

应用此功能后,会出现以下两种情况:

最近邻隔离

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

最近隔离图

严格隔离

严格的区域隔离是指前端位置只能访问本地区域内的后端。本地区域中没有提供服务的后端的前端将丢弃其所有流量。

严格隔离图

启用隔离

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. NEAREST:流量会发送到最近的区域。
    2. STRICT:如果前端所在的区域中没有可提供服务的后端,则流量会失败。

    如果未明确提供,则默认值为 NEAREST。请注意,只有在同时设置了 --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 将开始向远程区域发送流量。这也是预期行为。

请求失败

如果启用了 STRICT 隔离模式,并且没有后端在与前端相同的区域中提供服务,则流量预计会失败。如果这不是预期行为,请确保您在希望发送流量的每个区域中都有后端。