開始使用 API Gateway 的負載平衡功能

本教學課程將說明如何建立全域外部應用程式負載平衡器,將要求導向 API Gateway。設定程序與設定全域外部應用程式負載平衡器與其他無伺服器產品 (例如 Cloud RunCloud Run 函式App Engine) 的步驟相同。

雖然 API Gateway 不必使用負載平衡器,但負載平衡器可讓閘道充分發揮負載平衡器的優勢。舉例來說,您可以使用全域外部應用程式負載平衡器搭配 API Gateway,執行以下操作:

  • 使用自訂網域。
  • 將 Google Cloud Armor 用作網路安全性服務。
  • 管理多個位置閘道的負載平衡。
  • 實施進階流量管理。

事前準備

  1. 如果您尚未下載及安裝 Google Cloud CLI,請先完成這項操作。

    下載 gcloud CLI

  2. 更新 gcloud 元件:

    gcloud components update
  3. 按照 API Gateway 快速入門的說明部署 Cloud Run 服務,並建立指向該服務的閘道。

  4. 設定權限

  5. 新增 SSL 憑證資源

部署 Cloud Run 服務和 API Gateway 執行個體

在本教學課程中,您將向 Cloud Run 部署「Hello World」服務、建立可將路由導向 Cloud Run 服務的閘道,以及設定全域外部應用程式負載平衡器,將要求轉送至自訂網域。

雖然本教學課程使用 Cloud Run 做為 API Gateway 的後端服務,但這些步驟也適用於 API Gateway 支援的任何後端服務。

完成 API Gateway 快速入門後,您應該會取得指向 Cloud Run 服務的已部署閘道網址。

設定權限

在本教學課程中,您將建立無伺服器的網路端點群組 (NEG),並在 Cloud 專案中建立全球外部應用程式負載平衡器。您必須具備專案擁有者或編輯者角色,或是下列 Compute Engine 身分與存取權管理角色

工作 必要角色
建立負載平衡器和網路元件 網路管理員
建立及修改 NEG Compute 執行個體管理員
建立及修改 SSL 憑證 安全性管理員

建立 SSL 憑證資源

如要建立全域外部應用程式負載平衡器,您必須將 SSL 憑證資源新增至負載平衡器的前端。使用 Google 代管的 SSL 憑證自行管理的 SSL 憑證建立 SSL 憑證資源。

  • Google 代管憑證:建議您使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。如果您還沒有網域,可以透過 Google Domains 取得。此外,您需要更新網域的 DNS A 記錄,將其指向在後續步驟中建立的負載平衡器 IP 位址。如需詳細操作說明,請參閱「使用 Google 管理的憑證」。

  • 自行簽署的憑證。如果您目前不想設定網域,可以使用自行簽署的安全資料傳輸層 (SSL) 憑證進行測試。

本教學課程假設您已建立 SSL 憑證資源。

如果您想在不建立 SSL 憑證資源 (或 Google 代管憑證所需的網域) 的情況下測試這個程序,仍可按照本頁操作說明設定 HTTP 負載平衡器。

建立全域外部應用程式負載平衡器

  1. 為 API Gateway 建立無伺服器網路端點群組。

    網路端點群組 (NEG) 可指定負載平衡器的一組後端端點。無伺服器 NEG 是指向 API Gateway 等服務的後端,如下圖所示:

    圖表:無伺服器 neg 做為多區域閘道的後端

    如要為閘道建立無伺服器 NEG,請執行下列指令,其中:

    • SERVERLESS_NEG_NAME 是要建立的無伺服器 NEG 名稱。
    • GATEWAY_ID 會指定閘道的名稱。
    • REGION_ID 是無伺服器 NEG 的部署區域 (應與閘道區域相符)。
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    例如:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. 建立後端服務,定義全域外部應用程式負載平衡器如何分配流量。

    後端服務設定包含一組值,例如用於連線至後端的通訊協定、各種發布和工作階段設定、健康檢查和逾時,如以下圖所示:

    無伺服器 NEG 做為後端服務的後端的圖表

    如要建立後端服務,請執行下列指令:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    其中 BACKEND_SERVICE_NAME 是新後端服務的名稱。

    例如:

    gcloud compute backend-services create api-gateway-backend-service --global

    如要將無伺服器 NEG 新增至後端服務,以做為後端使用,請執行下列指令,其中:

    • BACKEND_SERVICE_NAME 是後端服務的名稱。
    • SERVERLESS_NEG_NAME 是您在前一個步驟中建立的無伺服器 NEG 名稱。
    • REGION_ID 是無伺服器 NEG 的部署區域 (應與閘道區域相符)。
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    例如:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. 建立網址對應,將收到的要求轉送至後端服務,如下圖所示:

    網址對應至後端服務的圖表

    如要建立網址對應,請執行下列指令,其中:

    • URL_MAP_NAME 是您要建立的網址對應名稱。
    • BACKEND_SERVICE_NAME 是後端服務的名稱。
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    例如:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    這個網址對應範例只會指定一個代表單一網關的後端服務,因此不需要主機規則或路徑比對器。如果您有多個後端服務,可以使用主機規則,根據主機名稱將要求導向至不同的服務。使用路徑比對器,根據要求路徑將要求導向至不同的服務。

    例如:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    如要進一步瞭解主機規則和路徑比對器,請參閱 網址對應說明文件。

  4. 為目標 Proxy 建立 SSL 憑證,如下圖所示:

    目標 Proxy 的 SSL 憑證圖表

    如要建立全域外部應用程式負載平衡器,HTTP(S) 目標 Proxy 需要SSL 憑證資源。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證建立 SSL 憑證資源。建議您使用 Google 代管的憑證。如果您在沒有 SSL 憑證資源的情況下測試這個程序,並且想要設定 HTTP 負載平衡器,可以略過這個步驟。

    如要建立 Google 代管的憑證, 您必須擁有網域。如果您沒有網域,可以使用自行簽署的安全資料傳輸層 (SSL) 憑證進行測試。

    建立 Google 代管的 SSL 憑證資源:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    建立自行管理的 SSL 憑證資源:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. 建立目標 HTTP(S) Proxy,將要求轉送至網址對應,如下圖所示:

    HTTP Proxy 到網址對應的圖表

    如要建立目標 Proxy,請使用下列指令,其中:

    • TARGET_HTTPS_PROXY_NAME 是您要建立的目標 HTTP(S) Proxy 名稱。
    • URL_MAP_NAME 是您在先前步驟中建立的網址對應名稱。
    • 選用:SSL_CERT_NAME 是建立的 SSL 憑證名稱。
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    例如:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    如先前所述,您可以建立 HTTP 負載平衡器,而無須建立 SSL 憑證資源。如要執行這項操作,請使用下列指令:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    例如:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    後續的 HTTP Proxy 指令應修改為支援 --target-http-proxy 標記,並為其 HTTP(S) 對應項目設定 TARGET_HTTP_PROXY_NAME

  6. 建立轉送規則,將收到的項目要求轉送至 Proxy,如以下圖所示:

    轉送至 HTTP Proxy 的轉送規則圖表

    使用下列指令建立轉送規則,其中:

    • HTTPS_FORWARDING_RULE_NAME 是要建立的規則名稱。
    • TARGET_HTTPS_PROXY_NAME 是 HTTP(S) 目標 Proxy 的名稱。
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    例如:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

使用負載平衡器 IP 位址更新 DNS 記錄

如果您使用自訂網域,則必須執行這個步驟,才能設定網域的 DNS 設定,讓網域指向服務的新 IP 位址。如果您使用 Google 代管的憑證 (需要網域) 建立全域外部應用程式負載平衡器,也必須使用網域。建議您在使用 DNS 時,分配及使用靜態 IP 位址。這個步驟的具體操作說明會因 DNS 供應商而異。

  1. 如要將流量傳送至負載平衡器,網域的 DNS 記錄 (在本教學課程中為 my-app-domain) 必須指向負載平衡器的 IP 位址。

    如要找出通用轉送規則的 IP 位址,請使用下列指令:

    gcloud compute forwarding-rules list
  2. 更新網域的 DNS A 或 AAAA 記錄,指向負載平衡器的 IP 位址,這樣系統就會將傳送至現有自訂網域網址的流量,改為透過負載平衡器轉送。DNS 可能需要幾秒或數小時的時間,才能將這項變更傳播至 DNS 伺服器。

  3. 請使用 curl 或在瀏覽器中造訪下列網址,藉此測試閘道是否可接收到流量。例如:https://my-app-domain

    測試時,您應該會看到 Cloud Run 服務產生的回應。舉例來說,這可能會是「Hello World」HTML 頁面,或是後端服務直接產生的其他預期回應。這表示您的要求會經過負載平衡器,而後端服務會指示負載平衡器將要求傳送至網關。

測試負載平衡器設定

負載平衡器已設定完成,您現在可以開始將流量傳送至轉送規則的 IP 位址。

如要找出通用轉送規則的 IP 位址,請使用下列指令:

gcloud compute forwarding-rules list

使用 curl 指令測試您服務的各個網址的回應。例如:

curl https://HOST_URL/hello/
curl https://HOST_URL

您可以使用 API Gateway Cloud 控制台,確認要求是否傳送至正確的服務。

恭喜!您已成功為 API Gateway 預先發布版設定全域外部應用程式負載平衡器。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取這個快速入門導覽課程所用資源的費用,請刪除您建立的 Cloud Load Balancing 資源。如果是在資源專屬的專案中建立資源,可以刪除整個專案。否則,您可以個別刪除資源。

刪除專案

執行下列指令,將 PROJECT_ID 替換為您的專案 ID:

gcloud projects delete PROJECT_ID

刪除個別資源

刪除負載平衡器中的每個元件:

  1. 刪除轉送規則:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. 刪除通用外部 IP 位址:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. 刪除目標 Proxy:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. 刪除網址對應:

    gcloud compute url-maps delete URL_MAP_NAME
  5. 刪除後端服務:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (選用) 刪除 SSL 憑證:

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

刪除無伺服器網路端點群組 (NEG):

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION