Cloud Service Mesh 的隔离
本页面介绍如何通过创建隔离配置,为后端服务的服务网格实现更好的请求隔离。
此功能可为服务的后端提供额外的隔离支持,以防止跨区域溢出。
默认情况下,Cloud Service Mesh 使用 waterfall by region 算法来决定用户流量应路由到何处。Cloud Service Mesh 会使用此算法将流量路由到最近的区域,直到后端达到其配置的容量上限。之后,流量将开始溢出到更远的区域。
借助此功能,系统会根据您的前端区域和隔离配置,将流量限制在最近的区域或本地区域,即使最近的区域容量不足,流量也不会溢出。这有助于防范潜在的级联故障,并让可能的服务中断仅在发生故障的单一区域内发生。除此之外,您仍需在全球级管理服务配置。
是否使用此功能取决于您的实际应用场景,您应在使用此功能前仔细考虑以下事项:
- 如果某个区域中的后端过载,Cloud Service Mesh 仍可能会向这些后端发送额外的流量,即使其他区域中的后端可以处理流量也是如此。这意味着,各区域因流量增加而过载的可能性增大,因此您需要相应地制定应对计划。
- 您的流量仍通过全球控制平面进行路由。这意味着,仍有可能出现跨多个区域的全球协调故障。
- 此功能通过 serviceLbPolicy 资源进行配置。所有限制仍然适用。
- 在严格隔离模式下,如果同一区域中没有能够处理流量的后端,则请求会失败。
应用此功能后,有以下两种情况:
最近隔离
最近区域隔离是指将与后端在同一区域的前端仅隔离到该区域中。如果本地位置没有可用的后端,则该前端会连接到后端区域,同时优化网络延迟时间。
严格隔离
严格区域隔离是指前端位置只能访问本地区域内的后端。如果本地区域中没有能够处理流量的后端,前端将丢弃其所有流量。
启用隔离
gcloud
执行以下步骤,使用 Google Cloud CLI 创建隔离配置。
运行以下命令以创建
serviceLbPolicy
:gcloud network-services service-lb-policies create my-isolation-policy \ --isolation-config-granularity=REGION \ --isolation-config-mode=ISOLATION_MODE \ --location=global
将 ISOLATION_MODE 替换为以下某个选项:
- 最近:流量会发送到最近的区域。
- 严格:如果前端所在的区域中没有能够处理流量的后端,则流量会被丢弃。
如果未明确指定,则默认值为最近。请注意,只有在同时设置了
--isolation-granularity
标志的情况下,您才能指定此字段。或者,如果您有现有政策,也可以使用以下命令更新该政策:
gcloud network-services service-lb-policies update POLICY_NAME \ --isolation-config-granularity=REGION \ --isolation-config-mode=ISOLATION_MODE \ --location=global
将 POLICY_NAME 替换为现有政策的名称。
创建或更新
serviceLbPolicy
资源后,将其与backendService
资源相关联:gcloud compute backend-services update BACKEND_SERVICE_NAME \ ‐‐service-lb-policy POLICY_URL
将 BACKEND_SERVICE_NAME 替换为您的后端服务的名称。
停用隔离
如要停用此功能,有如下两种方法:
- 将
isolationConfigs
设置为未指定。 - 如果该功能是您通过
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 将开始向远程区域发送流量。这也是预期行为。
请求失败
如果启用了严格隔离模式,但前端所在区域中没有能够处理流量的后端,则流量预计会被丢弃。如果这不是预期行为,请确保您在希望发送流量的每个区域中都有后端。