Cloud Service Mesh 的隔离
本页面介绍了如何通过创建隔离配置,为后端服务配置服务网格,以实现更好的请求隔离。
此功能可为服务的后端提供额外的隔离支持,以防止跨区域溢出。
默认情况下,Cloud Service Mesh 使用按区域划分的瀑布算法来决定用户流量应路由到何处。借助此算法,Cloud Service Mesh 会将流量路由到最近的区域,直到后端达到其配置的容量上限。之后,流量将开始溢出到更远的区域。
借助此功能,系统会根据您的前端区域和隔离配置,将流量限制在最近的区域或本地区域,即使最近的区域容量不足,流量也不会溢出。这有助于您防止潜在的级联故障,并限制同一区域内可能发生的服务中断。否则,您仍需在全球级层管理服务配置。
是否使用此功能取决于您的实际使用情形,您应在使用前仔细考虑以下事项:
- 如果某个区域中的后端过载,Cloud Service Mesh 仍可能会向这些后端发送额外的流量,即使其他区域中的后端可以处理流量也是如此。这意味着,由于流量增加,每个单独的区域更有可能过载,因此您需要相应地制定计划。
- 您的流量仍通过全球控制平面进行路由。这意味着,仍有可能出现跨多个区域的全球性协调故障。
- 此功能通过 serviceLbPolicy 资源进行配置。所有限制仍然适用。
- 如果采用 STRICT 隔离模式,则当同一区域中没有提供服务的后端时,请求会失败。
应用此功能后,会出现以下两种情况:
最近邻隔离
最近的区域隔离是指具有同位后端的应用前端将仅隔离到该区域。如果本地位置没有可用的后端,则该前端会连接到后端区域,同时优化网络延迟时间。
严格隔离
严格的区域隔离是指前端位置只能访问本地区域内的后端。本地区域中没有提供服务的后端的前端将丢弃其所有流量。
启用隔离
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 替换为以下某个选项:
- NEAREST:流量会发送到最近的区域。
- 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 替换为现有政策的名称。
创建或更新
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 将开始向远程区域发送流量。这也是预期行为。
请求失败
如果启用了 STRICT 隔离模式,并且没有后端在与前端相同的区域中提供服务,则流量预计会失败。如果这不是预期行为,请确保您在希望发送流量的每个区域中都有后端。