Cloud Service Mesh 的隔離功能

本頁面說明如何建立隔離設定,為後端服務設定更完善的請求隔離機制,進而設定服務網格。

這項功能可為服務後端提供額外的隔離支援,防止跨區域溢位。

根據預設,Cloud Service Mesh 會使用依區域的瀑布式演算法,決定使用者流量的路由目的地。透過這項演算法,Cloud Service Mesh 會將流量轉送至最靠近的區域,直到後端達到設定的容量上限為止。之後,流量就會開始溢流至較遠的區域。

這項功能會根據前端區域和隔離設定,將流量限制在最接近或本機的區域,即使最接近的區域容量不足,流量也不會溢出。這有助於防範潛在的連鎖故障,並限制同一區域的潛在停機時間。否則,您仍須在全域層級管理服務設定。

隔離圖

是否使用這項功能取決於實際用途,使用前請仔細考量下列事項:

  • 如果某個區域的後端過度負載,即使其他區域的後端可以處理流量,Cloud Service Mesh 仍可能會將額外流量傳送至該區域。這表示額外流量可能會導致每個區域過載,因此您需要相應地規劃。
  • 您的流量仍會透過全域控制層轉送。也就是說,多個區域仍有可能發生全域協調式故障。
  • 這項功能是透過serviceLbPolicy 資源設定。所有限制仍適用。
  • 如果使用 STRICT 隔離模式,且同一區域中沒有服務後端,要求就會失敗。

套用這項功能後,會有兩種情況:

Nearest Isolation

「最近的區域隔離」是指前端與共置後端會隔離到該區域。如果本機位置沒有可用的後端,系統會連線至後端區域,同時盡量縮短網路延遲時間。

最接近的隔離圖

嚴格隔離

嚴格的區域隔離是指前端位置只能連線至本區域內的後端。如果前端在當地區域沒有提供服務的後端,就會捨棄所有流量。

嚴格隔離機制圖表

啟用隔離

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 會開始將流量傳送至遠端區域。這也是預期中的行為。

要求失敗

如果啟用「嚴格」隔離模式,且前端所在區域沒有任何後端提供服務,流量預期會失敗。如果這不是預期行為,請確認您在預期流量傳送的每個區域中都有後端。