本頁面將概略說明全域外部應用程式負載平衡器與傳統版應用程式負載平衡器的差異,並詳細介紹如何將現有的傳統版應用程式負載平衡器資源遷移至全域外部應用程式負載平衡器。
如要使用全域外部應用程式負載平衡器的進階流量管理功能,建議您將傳統版應用程式負載平衡器資源遷移至全域外部應用程式負載平衡器基礎架構。
比較傳統版應用程式負載平衡器和全域外部應用程式負載平衡器
遷移資源前,請先瞭解傳統版應用程式負載平衡器和全域外部應用程式負載平衡器之間的差異。
功能差異
全域外部應用程式負載平衡器不支援下列功能。這些功能僅適用於傳統版應用程式負載平衡器:
- 標準網路級別
-
如要為 GKE 叢集部署全域外部應用程式負載平衡器,請改用 GKE Gateway 控制器。如需設定操作說明,請參閱「部署閘道」。
資料層差異
下表重點列出傳統版應用程式負載平衡器和全域外部應用程式負載平衡器在資料層面的差異。這些差異會影響負載平衡器對某些常見事件的回應方式。
| 活動 | 傳統版應用程式負載平衡器回應 | 全域外部應用程式負載平衡器回應 |
| 狀態/錯誤代碼 | ||
| 所有後端的運作狀態皆不良 | 傳回 HTTP 502 | 傳回 HTTP 503 |
| 要求使用遭禁的 SSL 密碼 | 傳回 HTTP 502 | 傳回 HTTP 503 |
| 後端提早重設上游連線 | 傳回 HTTP 502 | 傳回 HTTP 503 |
| 連線升級失敗 (例如升級至 Websocket 時) | 傳回 HTTP 400 | 傳回 HTTP 403 |
| 標頭過大 | 傳回 HTTP 413 | 傳回 HTTP 431 |
| 配額與限制 | ||
| 網址對應設定 | 這兩種負載平衡器的網址對應設定限制有顯著差異。詳情請參閱配額:網址對應說明文件。 | |
| 標頭處理 | ||
| 要求使用沒有主體的自訂 HTTP 方法 | 將 Transfer Encoding: Chunked 標頭新增至傳送至後端的要求 |
將 Content-Length: 0 標頭新增至傳送至後端的要求 |
新增至傳送至後端要求的 X-Forwarded-For 標頭格式 |
IP 之間使用「, 」分隔符號 |
IP 之間使用「,」分隔符號 (逗號後不得有空格) |
| 保留標頭大小寫 | 保留標頭大小寫 | 所有標頭鍵都會轉換為小寫 |
| 名稱相同的重複標頭 | 允許 | 重複的標頭可能會合併為單一標頭,並依序附加值,以半形逗號分隔,如 RFC 7230 所允許。 |
| (僅限 HTTP/1.1) 無效的標頭名稱 (例如標頭中含有不支援的字元) | 允許 (適用於 HTTP/1.1) | 傳回 HTTP 502 (適用於 HTTP/1.1) |
(僅限 HTTP/1.1) 要求中重複 (但相同) 的 Content-Length 標頭 |
允許 (適用於 HTTP/1.1) | 傳回 HTTP 502 (適用於 HTTP/1.1) |
| (僅限 HTTP/1.1) 標頭中的多個主機 | 如果新增 2 個以上的網域,且第一個網域有效,系統就會接受標頭。 | 如果新增 2 個以上的主機,且其中有任何主機無效,負載平衡器會傳回 HTTP 502 |
(僅限 HTTP/1.1) Connection: Keep-Alive
header |
根據預設,在傳送至後端的要求中加入 Keep-Alive header |
預設不會新增這項標頭 |
| 處理要求 | ||
| 要求中的反斜線 | 網址維持不變 | 轉換為斜線 |
| 合併要求中的重複斜線 | 未合併的斜線 | 合併斜線 |
| 要求路徑中的 `#` | 允許 | 傳回 HTTP 400 |
| (僅限 HTTP/1.1) 要求路徑中含有無效字元 (例如 `\\x7f\\x7f`) | 允許 (適用於 HTTP/1.1) | 傳回 HTTP 502 (適用於 HTTP/1.1) |
| 流量分配 (網址對應設定) | ||
| 用戶端要求包含連接埠號碼 | 即使您已在網址對應中設定含有通訊埠的主機,系統仍會忽略通訊埠編號。系統只會考量主機名稱。
舉例來說,對 example.com:5000 的要求會與 example.com 的後端服務相符。 |
系統會同時考量主機名稱和通訊埠號碼。
舉例來說,對 example.com:5000 的要求會對應至 example.com:5000 的後端服務。如果沒有相符項目,系統會使用預設後端服務。
|
由於架構不同,遷移至全域外部應用程式負載平衡器時,您可能會發現後端的連線數增加,尤其是在使用 HTTP/1.1 通訊協定時。這可能會導致後端執行個體的記憶體用量增加。在遷移期間和遷移後,監控後端資源用量。
如要進一步瞭解差異和支援的功能,請參閱「負載平衡器功能比較」和「應用程式負載平衡器總覽」。
從傳統版遷移至全域外部應用程式負載平衡器
如要遷移至全域外部應用程式負載平衡器,請將負載平衡資源 (具體來說是後端服務和轉送規則) 的負載平衡架構從 EXTERNAL 變更為 EXTERNAL_MANAGED。為此,您需要執行一系列遷移步驟,在實際完成遷移作業前,先使用新的負載平衡機制測試部分網路流量。在資源遷移期間,您可以控管要將多少百分比的要求傳送至傳統版應用程式負載平衡器基礎架構,或是全域外部應用程式負載平衡器基礎架構。
下圖顯示遷移前後負載平衡資源的負載平衡配置。
在上圖中,請注意下列事項:
- 資源遷移前,所有要求都會使用傳統的應用程式負載平衡器基礎架構。
- 資源遷移期間,部分要求會傳送至全域外部應用程式負載平衡器基礎架構,其餘要求則會傳送至傳統版應用程式負載平衡器基礎架構。
- 資源遷移完成後,所有要求都會使用全域外部應用程式負載平衡器基礎架構。
為確保轉換作業順利進行,請按照指定順序遷移下列傳統版應用程式負載平衡器資源:
遷移附加至負載平衡器轉送規則的所有後端服務。
遷移所有附加至負載平衡器轉送規則的後端值區。您會在轉送規則層級執行這項操作,因為後端 bucket 沒有負載平衡配置。
遷移負載平衡器的轉送規則。
只有在遷移轉送規則所連結的所有後端服務和後端值區後,才能遷移轉送規則。
遷移狀態
如要遷移資源,請先將資源設為不同狀態,再將負載平衡配置變更為 EXTERNAL_MANAGED。
PREPARE:將資源設為這個狀態,準備遷移。TEST_BY_PERCENTAGE:如要測試準備好的資源,請將資源設為這個狀態,以傳送一定比例的網路流量。這個階段為選用階段。TEST_ALL_TRAFFIC:將資源設為這個狀態,即可透過全域外部應用程式負載平衡器基礎架構,將所有網路流量傳送至資源,而非透過傳統版應用程式負載平衡器基礎架構。
遷移流程
為確保服務不會中斷,請按照特定順序,將資源從傳統版應用程式負載平衡器基礎架構遷移至全域外部應用程式負載平衡器基礎架構,然後將負載平衡架構從 EXTERNAL 變更為 EXTERNAL_MANAGED,完成遷移作業。
遷移負載平衡器的後端服務。
針對每個後端服務重複執行下列步驟。
準備遷移後端服務。
如要透過全域外部應用程式負載平衡器基礎架構傳送任何流量,請將後端服務的狀態設為
PREPARE。這會準備後端服務,以處理全域外部應用程式負載平衡器基礎架構網路流量。後端服務需要一段時間 (約六分鐘),才能透過全域外部應用程式負載平衡器基礎架構傳送流量。選用:測試準備好的後端服務。
後端服務處於
PREPARE狀態後,請將其狀態設為TEST_BY_PERCENTAGE,並將傳統版應用程式負載平衡器網路流量的百分比設為全域外部應用程式負載平衡器基礎架構。雖然這個階段是選用步驟,但我們建議您先測試流量,再遷移後端服務。先從較小的百分比值開始,並監控資源記錄。如果後端服務運作正常,請逐步將百分比調高至 100%。
處於
TEST_BY_PERCENTAGE狀態時,您無法使用全域外部應用程式負載平衡器基礎架構的額外功能。將所有傳統版應用程式負載平衡器網路流量傳送至準備好的後端服務。
後端服務測試成功後,請將狀態設為
TEST_ALL_TRAFFIC,並將所有傳統應用程式負載平衡器網路流量傳送至準備好的後端服務。後端服務需要一段時間 (約六分鐘) 才能準備好處理網路流量。處於
TEST_ALL_TRAFFIC狀態時,您無法使用全域外部應用程式負載平衡器基礎架構的額外功能。將遷移後端服務的負載平衡架構變更為
EXTERNAL_MANAGED。在全域外部應用程式負載平衡器基礎架構上測試準備好的後端服務後,請將負載平衡架構變更為
EXTERNAL_MANAGED。後端服務需要一段時間 (約六分鐘) 才能完全移轉。後端服務的負載平衡架構變更為EXTERNAL_MANAGED後,您就可以使用全域外部應用程式負載平衡器基礎架構的進階功能。
遷移負載平衡器的後端值區。您會在轉送規則層級執行這項操作,因為後端 bucket 沒有負載平衡配置。
針對每個值區重複執行下列步驟。
為遷移作業準備後端 bucket。
如要透過全域外部應用程式負載平衡器基礎架構傳送任何流量,請先將後端儲存空間的狀態設為
PREPARE,然後等待一段時間 (約六分鐘)。選用:測試準備好的後端服務。
後端值區處於
PREPARE狀態後,請將其狀態設為TEST_BY_PERCENTAGE,並將傳統版應用程式負載平衡器網路流量的百分比設為全域外部應用程式負載平衡器基礎架構。將所有傳統版應用程式負載平衡器網路流量傳送至準備好的後端 bucket。
將後端 bucket 的狀態設為
TEST_ALL_TRAFFIC,並將所有傳統版應用程式負載平衡器網路流量傳送至該 bucket。後端 bucket 需要一段時間 (約六分鐘) 才能準備好處理網路流量。處於
TEST_ALL_TRAFFIC狀態時,您無法使用全域外部應用程式負載平衡器基礎架構的額外功能。
遷移轉送規則。
針對每項轉送規則,將轉送規則的負載平衡機制變更為
EXTERNAL_MANAGED,並等待一段時間 (約六分鐘)。轉送規則的負載平衡架構變更為EXTERNAL_MANAGED後,您就可以使用全域外部應用程式負載平衡器基礎架構的進階功能。
如需詳細的逐步程序,請參閱「從傳統版應用程式負載平衡器遷移資源」。
下圖顯示遷移作業不同階段的傳統版應用程式負載平衡器資源。
遷移資源後,如要將資源還原為傳統型應用程式負載平衡器,請在遷移後 90 天內變更資源的負載平衡配置。90 天期限過後,您就無法復原資源。
使用工作階段相依性
遷移具有工作階段親和性的傳統版應用程式負載平衡器後端服務時,請注意下列事項:
設定
TEST_BY_PERCENTAGE的值會將部分流量重新導向至全域外部應用程式負載平衡器,這些流量原本是以傳統版應用程式負載平衡器為目標。這會破壞用戶端 IP 親和性。變更遷移百分比 (例如增加 10%) 會中斷相同百分比的用戶端 IP 位址 (本例為 10%) 的工作階段相依性,直到下一個要求重新建立相依性為止。設定
TEST_BY_PERCENTAGE的值後,系統會將該百分比的流量重新導向至全域外部應用程式負載平衡器,這些流量不含工作階段 Cookie。此外,系統也會將所有含有工作階段 Cookie 的流量,重新導向至產生該 Cookie 的負載平衡器叢集。將
TEST_BY_PERCENTAGE的值設為 0%,或不設定,或將後端服務設為PREPARE狀態,都會使導向全域外部應用程式負載平衡器的所有現有 Cookie 失效。將後端服務的負載平衡機制變更為
EXTERNAL_MANAGED,會使傳統版應用程式負載平衡器機群產生的所有 Cookie 失效。如果應用程式使用全域外部應用程式負載平衡器時發生問題,您就能回溯流量。舉例來說,如果用戶端提供來自傳統版應用程式負載平衡器機群的 Cookie,但後端服務架構為EXTERNAL_MANAGED,系統就不會採用用戶端的 Cookie。全域外部應用程式負載平衡器會忽略 Cookie 並建立新的 Cookie。
復原遷移的資源
遷移資源後,如要從全域外部應用程式負載平衡器基礎架構還原至傳統版應用程式負載平衡器基礎架構,您可以在變更負載平衡配置後的 90 天內執行這項操作。
如要將後端服務復原為 EXTERNAL 配置,必須復原轉送規則。將轉送規則復原為 EXTERNAL 架構時,不需要復原後端服務。
如要回溯資源,請按照下列步驟操作:
- 移除在資源上設定的全域外部應用程式負載平衡器進階流量管理功能。
還原轉送規則。
將轉送規則的負載平衡機制從
EXTERNAL_MANAGED改為EXTERNAL。復原後端 bucket。
- 將後端 bucket 的遷移狀態設為
TEST_ALL_TRAFFIC,並等待一段時間 (約六分鐘)。 - 選用:如要減少流量,請將後端 bucket 的遷移狀態設為
TEST_BY_PERCENTAGE,並設定流量百分比。 - 將後端 bucket 的遷移狀態設為
PREPARE。 - 將後端 bucket 還原至遷移前的狀態。
- 將後端 bucket 的遷移狀態設為
復原後端服務。
- 將後端服務的遷移狀態設為
TEST_ALL_TRAFFIC,並等待一段時間 (約六分鐘)。 - 選用:如要減少流量,請將後端服務的遷移狀態設為
TEST_BY_PERCENTAGE,並設定流量百分比。 - 將後端服務的遷移狀態設為
PREPARE。 - 將後端服務還原至遷移前的狀態。
- 將後端服務的遷移狀態設為
如需詳細的逐步程序,請參閱「將遷移的資源還原至傳統型應用程式負載平衡器」。
追蹤遷移程序
遷移資源時,您可以查看下列項目,瞭解資源的負載平衡配置:
全域外部應用程式負載平衡器的記錄和監控資訊主頁。詳情請參閱「全域外部應用程式負載平衡器記錄與監控」。
下列 HTTP 要求和回應標頭的值:
X-External-Managed-Migration-Scheme-Override:這個要求標頭會根據要求的值,將要求轉送至適當位置。如果標頭值為EXTERNAL,則會將要求導向至傳統版應用程式負載平衡器基礎架構。如果值為EXTERNAL_MANAGED,系統會透過全域外部應用程式負載平衡器基礎架構轉送要求。使用這個標頭將要求導向特定負載平衡器叢集。
X-External-Managed-Migration-Selected-Scheme:這個要求和回應標頭會將用於轉送要求的負載平衡機制告知後端和用戶端。標頭會傳回給用戶端,並傳遞至客戶的後端。如果要求是透過傳統版應用程式負載平衡器基礎架構轉送,則值為
EXTERNAL。如果要求是透過全域外部應用程式負載平衡器基礎架構轉送,則值為EXTERNAL_MANAGED。