設定邊緣擴充功能

有了 Service Extensions,支援的應用程式負載平衡器就能使用外掛程式,在處理路徑中插入自訂處理程序。負載平衡器收到要求標頭時,邊緣擴充功能會在要求處理路徑中執行,並在評估 網址對應或呼叫 Cloud CDN 之前執行,讓您影響快取和路由。本頁說明如何設定邊緣擴充功能。

如要瞭解應用程式負載平衡器擴充功能,請參閱「Cloud Load Balancing 擴充功能總覽」。

應用程式負載平衡器的擴充功能會指向下列資源:

  • 要附加的轉送規則
  • 外掛程式

擴充功能會參照要附加的負載平衡器轉送規則。設定資源後,負載平衡器就會開始將相符要求傳送至擴充功能服務。您只能將一個邊緣擴充功能附加至轉送規則,且邊緣擴充功能鏈中只能包含一個外掛程式。

如要瞭解應用程式負載平衡器擴充功能相關限制,請參閱「配額與限制」頁面。

使用外掛程式設定

本節將透過範例,說明如何使用外掛程式設定邊緣擴充功能,在路徑符合 /extensions 時,將 :host 要求標頭重新編寫為 service-extensions.com。先前的主機和新設定的主機對應至不同區域的後端服務,這會顯示轉送行為。

參照特定外掛程式的所有擴充功能資源都必須屬於相同類型。 擴充功能也必須採用相同的負載平衡配置。您無法使用 Media CDN 擴充功能中已使用的外掛程式,設定 Cloud Load Balancing 擴充功能。

事前準備

  1. 建立外掛程式,其中包含自訂程式碼

  2. 建立及設定支援 Edge 擴充功能外掛程式的應用程式負載平衡器

    請按照「設定具備 VM 執行個體群組後端的全域外部應用程式負載平衡器」頁面上的操作說明完成所有步驟,但下列步驟除外:

    • 將後端服務命名為 service-one
    • service-one 指向區域 A 中的虛擬機器 (VM) 執行個體。
    • 預設會指向 service-onegl7-gxlb-url-map
  3. 設定額外的後端服務 service-two,並將其指向 B 區域中的 VM。

  4. 在網址對應中,新增指向 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
    
  5. 設定將測試要求傳送至服務的方式 (例如執行 curl)。

使用外掛程式設定邊緣擴充功能

  1. 檢查擴充功能設定前的行為。

    1. 確認沒有明確路徑的要求會前往 A 區域:

      curl FORWARDING_RULE_IP
      

      FORWARDING_RULE_IP 替換為轉送規則的 IP 位址。如要找出 IP 位址,請使用 gcloud compute forwarding-rules describe 指令

      輸出內容會與下列內容相似,並指出網頁是從 region A 中的 VM 提供服務:

      Page served from region-A-vm
      
    2. 確認網址對應中沒有 /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>
      ...
      
  2. 設定 Edge 擴充功能。

    控制台

    1. 前往 Google Cloud 控制台的「Service Extensions」頁面。

      前往 Service Extensions

    2. 按一下「建立擴充功能」

      精靈會開啟,引導您完成一些初始步驟。

    3. 選取「負載平衡」產品。然後按一下「繼續」

      系統會顯示支援的應用程式負載平衡器清單。

    4. 負載平衡器類型請選取全域外部應用程式負載平衡器。然後按一下「繼續」

    5. 在擴充功能類型中選取「Edge 擴充功能」,然後按一下「繼續」

    6. 如要開啟「建立擴充功能」表單,請按一下「繼續」

      在「建立擴充功能」表單中,您會發現先前的選取項目無法編輯。

    7. 在「Basics」(基本) 部分,執行下列操作:

      1. 為擴充功能指定不重複的名稱。

        名稱開頭必須為小寫英文字母,後方最多可接 62 個小寫字母、數字或連字號,但結尾不得為連字號。

      2. 選用:輸入擴充功能的簡短說明,最多 1,024 個字元。

    8. 選用:在「標籤」部分中,按一下「新增標籤」。接著,在顯示的資料列中執行下列操作:

      • 在「Key」中輸入金鑰名稱。
      • 在「值」中輸入索引鍵的值。

      如要新增更多鍵/值組合,請按一下「新增標籤」。最多可新增 64 個鍵/值組合。

      如要進一步瞭解標籤,請參閱「建立及更新專案標籤」。

    9. 在「Forwarding rules」(轉送規則),選取要與擴充功能建立關聯的一或多個轉送規則,例如 cr-xlb-forwarding-rule

      無法選取已與其他擴充功能建立關聯的轉送規則,且這些規則會顯示為已停用。

    10. 如要為「擴充功能」新增擴充功能,以便在要求相符時執行,請按照下列步驟操作:

      • 如要比對執行擴充功能鏈的請求,請在「比對條件」中指定一般運算語言 (CEL) 運算式,例如 request.path.startsWith("/extensions")

        邊緣擴充功能只允許每個 CEL 運算式使用一個規則運算式。

        如要進一步瞭解 CEL 運算式,請按一下「取得語法說明」,或參閱 CEL 比對器語言參考資料

      • 在「Programmability type」(可程式化類型) 中,選取「Plugins」(外掛程式)

      • 在「外掛程式」部分,選取使用 Service Extensions 建立的外掛程式,或產品和擴充功能類型相同的外掛程式。邊緣擴充功能只能包含一個外掛程式。

      • 在「Forward headers」(轉送標頭) 部分,按一下「Add header」(新增標頭),然後新增要轉送至擴充功能的 HTTP 標頭 (來自用戶端或後端)。如果未指定標頭,系統會傳送所有標頭。

      • 選用:如要讓擴充功能在「Fail open」時失敗,請選取「Enabled」。在這種情況下,如果對擴充功能的呼叫失敗或逾時,要求或回應處理程序會繼續執行,不會發生錯誤。

        根據預設,系統不會選取「Fail open」(失敗時開啟) 欄位。在這種情況下,如果回應標頭尚未傳送至下游用戶端,系統會將一般 HTTP 500 狀態碼傳回給用戶端。如果已傳送回應標頭,系統會重設下游用戶端的 HTTP 串流。

      如果是邊緣擴充功能,每個擴充功能鏈只能指定一個擴充功能。

      如要指定多個擴充功能或擴充功能鏈,而非單一擴充功能,請按一下表單結尾的「切換至進階模式」按鈕,然後指定所需擴充功能和鏈。擴充功能會按照列出的順序執行。

      為每個擴充功能和擴充功能鏈結指定不重複的名稱。名稱必須符合 RFC-1034 規定,只能使用小寫英文字母、數字和連字號,且長度不得超過 63 個字元。此外,第一個字元必須是英文字母,最後一個字元必須是英文字母或數字。

    11. 按一下「建立擴充功能」

    gcloud

    1. 在 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
      EOF
      

      更改下列內容:

      • PROJECT_ID專案 ID
      • WASM_PLUGIN:外掛程式的 ID 或完整名稱

      邊緣擴充功能只允許每個 CEL 運算式使用一個規則運算式。

      如要進一步瞭解 YAML 檔案中的欄位,請參閱 API 說明文件中的「ExtensionChain」。

    2. 匯入 Edge 擴充功能。使用 gcloud service-extensions lb-edge-extensions import 指令,並搭配下列範例值:

      gcloud service-extensions lb-edge-extensions import edge-ext \
          --source=edge-plugin.yaml \
          --location=global
      

    建立邊緣擴充功能後,新外掛程式需要一段時間才能發布到所有位置。外掛程式不會同時傳送至所有地點,因此時間可能因地點而異。

  3. 如要確認邊緣擴充功能是否正常運作,請使用相同的 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 運算式中使用一個規則運算式。

如要瞭解所有擴充功能適用的限制,請參閱「擴充功能限制」。

後續步驟