開始使用 API Gateway 的負載平衡
本教學課程說明如何建立全域外部應用程式負載平衡器,將要求轉送至 API Gateway。設定程序與設定全域外部應用程式負載平衡器,並整合其他無伺服器產品 (例如 Cloud Run、Cloud Run functions 和 App Engine) 的程序相同。
API Gateway 運作時不需要負載平衡器,但負載平衡器可讓閘道充分發揮優勢。舉例來說,將全域外部應用程式負載平衡器與 API Gateway 搭配使用,可讓您:
- 使用自訂網域。
- 將 Google Cloud Armor 做為網路安全服務。
- 在多個地點的閘道之間,有效管理負載平衡。
- 實作進階流量管理。
事前準備
如果尚未安裝,請下載並安裝 Google Cloud CLI。
更新
gcloud元件:gcloud components update
按照 API Gateway 快速入門導覽課程,部署 Cloud Run 服務並建立指向該服務的閘道。
設定權限。
部署 Cloud Run 服務和 API Gateway 執行個體
在本教學課程中,您將「hello-world」服務部署至 Cloud Run、建立轉送至 Cloud Run 服務的閘道,並設定全域外部應用程式負載平衡器,將要求轉送至自訂網域。
雖然本教學課程使用 Cloud Run 做為 API Gateway 的後端服務,但這些步驟也適用於 API Gateway 支援的任何後端服務。
成功完成 API Gateway 快速入門導覽課程後,您應該會有指向 Cloud Run 服務的已部署閘道網址。
設定權限
在本教學課程中,您將建立無伺服器網路端點群組 (NEG),並在雲端專案中建立全域外部應用程式負載平衡器。您必須具備專案擁有者或編輯者角色,或是下列 Compute Engine IAM 角色:
| 工作 | 必要角色 |
|---|---|
| 建立負載平衡器和網路元件 | 網路管理員 |
| 建立及修改 NEG | Compute 執行個體管理員 |
| 建立及修改 SSL 憑證 | 安全管理員 |
建立 SSL 憑證資源
如要建立全域外部應用程式負載平衡器,必須在負載平衡器的前端新增 SSL 憑證資源。無論是 Google 代管的 SSL 憑證,還是自行管理的 SSL 憑證,都可用於建立 SSL 憑證資源。
Google 代管的憑證。建議使用這類憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。如果您還沒有網域,可以透過 Google Domains 取得。此外,您還需要更新網域的 DNS A 記錄,指向上一個步驟中建立的負載平衡器 IP 位址。如需詳細的操作說明,請參閱「使用 Google 代管的憑證」。
自行簽署的憑證。如果目前不想設定網域,可以使用自行簽署的 SSL 憑證進行測試。
本教學課程假設您已建立 SSL 憑證資源。
如果您不要建立 SSL 憑證資源 (或 Google 代管的憑證所需的網域),但想測試這個程序,您仍可按照本頁的說明操作,設定 HTTP 負載平衡器。
建立全域外部應用程式負載平衡器
為 API Gateway 建立無伺服器 NEG。
網路端點群組 (NEG) 會為負載平衡器指定一組後端端點。無伺服器 NEG 是指向 API Gateway 等服務的後端,如下圖所示:

如要為閘道建立無伺服器 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
建立後端服務,定義全域外部應用程式負載平衡器分配流量的方式。
後端服務設定包含一組值,例如用於連線至後端的通訊協定、各種分配和工作階段設定、健康狀態檢查和逾時,如下圖所示:

如要建立後端服務,請執行下列指令:
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
建立網址對應,將傳入要求轉送至後端服務,如下圖所示:

如要建立網址對應,請執行下列指令,其中:
- 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
如要進一步瞭解主機規則和路徑比對器,請參閱「網址對應」說明文件。
為目標 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
建立目標 HTTP(S) 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建立轉送規則,將傳入要求轉送至 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 供應商而異。
如要將流量傳送至負載平衡器,網域 (在本教學課程中為 my-app-domain) 的 DNS 記錄必須指向負載平衡器的 IP 位址。
如要找出全域轉送規則的 IP 位址,請使用下列指令:
gcloud compute forwarding-rules list
更新網域的 DNS A 或 AAAA 記錄,指向負載平衡器的 IP 位址,這樣傳送至現有自訂網域網址的流量就會改為透過負載平衡器轉送。DNS 可能需要幾秒鐘或幾小時,才能將這項變更傳播至 DNS 伺服器。
請使用
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
刪除個別資源
刪除負載平衡器中的每個元件:
刪除轉送規則:
gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
刪除通用外部 IP 位址:
gcloud compute addresses delete IP_ADDRESSES --global
刪除目標 Proxy:
gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
刪除網址對應:
gcloud compute url-maps delete URL_MAP_NAME
刪除後端服務:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
(選用) 刪除 SSL 憑證:
gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME
刪除無伺服器 NEG:
gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION