有了 Service Extensions,支援的應用程式負載平衡器就能使用外掛程式,在處理路徑中插入自訂處理程序。負載平衡器收到要求標頭時,邊緣擴充功能會在要求處理路徑中執行,並在評估 網址對應或呼叫 Cloud CDN 之前執行,讓您影響快取和路由。本頁說明如何設定邊緣擴充功能。
如要瞭解應用程式負載平衡器擴充功能,請參閱「Cloud Load Balancing 擴充功能總覽」。
應用程式負載平衡器的擴充功能會指向下列資源:
- 要附加的轉送規則
- 外掛程式
擴充功能會參照要附加的負載平衡器轉送規則。設定資源後,負載平衡器就會開始將相符要求傳送至擴充功能服務。您只能將一個邊緣擴充功能附加至轉送規則,且邊緣擴充功能鏈中只能包含一個外掛程式。
如要瞭解應用程式負載平衡器擴充功能相關限制,請參閱「配額與限制」頁面。
使用外掛程式設定
本節將透過範例,說明如何使用外掛程式設定邊緣擴充功能,在路徑符合 /extensions 時,將 :host 要求標頭重新編寫為 service-extensions.com。先前的主機和新設定的主機對應至不同區域的後端服務,這會顯示轉送行為。
參照特定外掛程式的所有擴充功能資源都必須屬於相同類型。 擴充功能也必須採用相同的負載平衡配置。您無法使用 Media CDN 擴充功能中已使用的外掛程式,設定 Cloud Load Balancing 擴充功能。
事前準備
建立及設定支援 Edge 擴充功能外掛程式的應用程式負載平衡器。
請按照「設定具備 VM 執行個體群組後端的全域外部應用程式負載平衡器」頁面上的操作說明完成所有步驟,但下列步驟除外:
- 將後端服務命名為
service-one。 - 將
service-one指向區域A中的虛擬機器 (VM) 執行個體。 - 預設會指向
service-one。gl7-gxlb-url-map
- 將後端服務命名為
設定額外的後端服務
service-two,並將其指向B區域中的 VM。在網址對應中,新增指向
service-two的路徑比對器。使用gcloud compute url-maps add-path-matcher指令,並搭配下列範例值:gcloud compute url-maps add-path-matcher gl7-gxlb-url-map \ --path-matcher-name=rewrite-host \ --default-service=service-two \ --new-hosts=service-extensions.com \ --location=global設定將測試要求傳送至服務的方式 (例如執行 curl)。
使用外掛程式設定邊緣擴充功能
檢查擴充功能設定前的行為。
確認沒有明確路徑的要求會前往
A區域:curl FORWARDING_RULE_IP
將
FORWARDING_RULE_IP替換為轉送規則的 IP 位址。如要找出 IP 位址,請使用gcloud compute forwarding-rules describe指令。輸出內容會與下列內容類似,並指出網頁是從
region A中的 VM 提供服務:Page served from region-A-vm確認網址對應中沒有
/extensions的相符項目:curl FORWARDING_RULE_IP/extensions
將
FORWARDING_RULE_IP替換為轉送規則的 IP 位址。如要找出 IP 位址,請使用gcloud compute forwarding-rules describe指令。輸出內容表示網址對應中沒有與
/extensions相符的項目。輸出結果會與下列內容相似:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
設定 Edge 擴充功能。
控制台
前往 Google Cloud 控制台的「Service Extensions」頁面。
按一下「建立擴充功能」。
精靈會開啟,引導您完成一些初始步驟。
選取「負載平衡」產品。然後按一下「繼續」。
系統會顯示支援的應用程式負載平衡器清單。
在負載平衡器類型部分,選取「全域外部應用程式負載平衡器」。然後按一下「繼續」。
在擴充功能類型中選取「Edge 擴充功能」,然後按一下「繼續」。
如要開啟「建立擴充功能」表單,請按一下「繼續」。
在「建立擴充功能」表單中,您會發現先前的選取項目無法編輯。
在「Basics」(基本) 部分,執行下列操作:
為擴充功能指定不重複的名稱。
名稱開頭必須為小寫英文字母,後方最多可接 62 個小寫字母、數字或連字號,但結尾不得為連字號。
選用:輸入擴充功能的簡短說明,最多 1,024 個字元。
選用:在「標籤」部分中,按一下「新增標籤」。接著,在顯示的資料列中執行下列操作:
- 在「Key」中輸入金鑰名稱。
- 在「值」中輸入索引鍵的值。
如要新增更多鍵/值組合,請按一下「新增標籤」。最多可新增 64 個鍵/值組合。
如要進一步瞭解標籤,請參閱「建立及更新專案標籤」。
在「Forwarding rules」(轉送規則),選取要與擴充功能建立關聯的一或多個轉送規則,例如
cr-xlb-forwarding-rule。如果轉送規則已與其他擴充功能建立關聯,就無法選取,且會顯示為已停用。
如要為「擴充功能」新增擴充功能,以便為相符要求執行,請按照下列步驟操作:
如要比對執行擴充功能鏈的請求,請在「比對條件」中指定一般運算語言 (CEL) 運算式,例如
request.path.startsWith("/extensions")。Edge 擴充功能只允許每個 CEL 運算式使用一個規則運算式。
如要進一步瞭解 CEL 運算式,請按一下「取得語法說明」,或參閱 CEL 比對器語言參考資料。
在「Programmability type」(可程式化類型) 中,選取「Plugins」(外掛程式)。
在「外掛程式」部分,選取使用 Service Extensions 建立的外掛程式,或產品和擴充功能類型相同的外掛程式。邊緣擴充功能只能包含一個外掛程式。
在「Forward attributes」(轉送屬性) 部分,選取要由負載平衡器轉送至 Wasm 外掛程式或回呼的要求、連線和位置屬性。每個擴充功能最多可設定 16 個屬性。詳情請參閱「支援的屬性」。
在「Forward headers」(轉送標頭) 部分,按一下「Add header」(新增標頭),然後新增要轉送至擴充功能的 HTTP 標頭 (來自用戶端或後端)。如果未指定標頭,系統會傳送所有標頭。
選用:如要讓擴充功能「Fail open」(失敗開啟),請選取「Enabled」(已啟用)。在這種情況下,如果對擴充功能的呼叫失敗或逾時,要求或回應處理程序會繼續執行,不會發生錯誤。
根據預設,系統不會選取「Fail open」(失敗時開啟) 欄位。在這種情況下,如果回應標頭尚未傳送至下游用戶端,系統會將一般 HTTP
500狀態碼傳回給用戶端。如果已傳送回應標頭,系統會重設下游用戶端的 HTTP 串流。
如果是邊緣擴充功能,每個擴充功能鏈只能指定一個擴充功能。
如要指定多個擴充功能或擴充功能鏈,而非單一擴充功能,請按一下表單結尾的「切換至進階模式」按鈕,然後指定所需擴充功能和鏈。擴充功能會依列出的順序執行。
為每個擴充功能和擴充功能鏈結指定不重複的名稱。名稱必須符合 RFC-1034 規定,只能使用小寫英文字母、數字和連字號,且長度不得超過 63 個字元。此外,第一個字元必須是英文字母,最後一個字元必須是英文字母或數字。
按一下「建立擴充功能」。
gcloud
在 YAML 檔案中定義外掛程式,並將其與全域轉送規則建立關聯,例如
cr-xlb-forwarding-rule。cat >edge-plugin.yaml <<EOF name: edge-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_HEADERS forwardAttributes: - request.host - request.path EOF更改下列內容:
PROJECT_ID:專案 IDWASM_PLUGIN:外掛程式的 ID 或完整名稱
Edge 擴充功能只允許每個 CEL 運算式使用一個規則運算式。
如要進一步瞭解 YAML 檔案中的欄位,請參閱 API 說明文件中的「ExtensionChain」。
forwardAttributes欄位可讓您指定要求、連線和位置屬性,並轉送至 Wasm 外掛程式或摘要服務。每個擴充功能最多可設定 16 個屬性。如要進一步瞭解支援的屬性,請參閱「支援的屬性」。匯入 Edge 擴充功能。使用
gcloud service-extensions lb-edge-extensions import指令,並搭配下列範例值:gcloud service-extensions lb-edge-extensions import edge-ext \ --source=edge-plugin.yaml \ --location=global
建立邊緣擴充功能後,新外掛程式需要一段時間才能發布到所有位置。外掛程式不會同時傳送到所有地點,因此各地點的安裝時間可能有所不同。
如要確認邊緣擴充功能運作正常,請使用相同的
curl指令:curl FORWARDING_RULE_IP/extensions
輸出內容會與下列內容類似,並指出網頁是從
region B中的 VM 提供服務:Page served from region-B-vm如要確認外掛程式只會針對具有
/extension路徑前置字串的要求執行,請重複執行curl指令,但不要指定路徑。curl FORWARDING_RULE_IP
輸出結果會與下列內容相似:
Page served from region-A-vm
邊緣擴充功能的限制
- 每個轉送規則只能附加一個邊緣擴充功能。
- Edge 擴充功能不支援 HTTP 內文處理。
- 邊緣擴充功能只允許每個 CEL 運算式使用一個規則運算式。
如要瞭解所有擴充功能適用的限制,請參閱「擴充功能限制」。
後續步驟
- 前往 Service Extensions 的 GitHub 外掛程式存放區,查看 Rust、Go 和 C++ 外掛程式範例和測試工具。
- 管理擴充功能