本主題說明如何使用網址對應重新導向,將所有內部應用程式負載平衡器要求從 HTTP 重新導向至 HTTPS。本頁範例使用知名的通訊埠 80 (HTTP) 和 443 (HTTPS)。不過,您不一定要使用這些特定的通訊埠號碼。應用程式負載平衡器的每個轉送規則都可以參照 1 到 65535 之間的單一通訊埠。
如要設定 HTTP 至 HTTPS 的重新導向,您必須建立兩個負載平衡器,一個負責 HTTPS 流量,另一個負責 HTTP 流量。每個負載平衡器都有自己的轉送規則、目標 Proxy 和網址對應,但共用相同的 IP 位址。對於 HTTP 負載平衡器,您不需要設定後端,因為前端會將流量重新導向至 HTTPS 負載平衡器的後端。
整體來說,如要將 HTTP 流量重新導向至 HTTPS,您必須執行下列操作:
- 建立使用保留的共用內部 IP 位址的一般內部 HTTPS 負載平衡器。
- 測試負載平衡器,確認其運作正常。
將流量重新導向至 HTTPS 負載平衡器。
為此,您必須建立僅有前端的部分內部 HTTP 負載平衡器。前端會接收要求,然後使用下列資源將要求重新導向至 HTTPS 負載平衡器:
- 轉送規則的保留內部 IP 位址,與您在步驟 1 中建立的 HTTPS 負載平衡器相同
- 目標 HTTP Proxy
- 將流量重新導向至 HTTPS 負載平衡器的網址對應
如下圖所示,HTTPS 負載平衡器是一般負載平衡器,其中包含預期的內部應用程式負載平衡器元件。
HTTP 負載平衡器的 IP 位址與 HTTPS 負載平衡器相同,且在網址對應中提供重新導向指示。
建立內部 HTTPS 負載平衡器
如要設定區域內部應用程式負載平衡器,請按照「設定內部應用程式負載平衡器」一文中的說明操作。
如果您已擁有運作中的區域內部應用程式負載平衡器,請確認該負載平衡器有專屬的共用 IP 位址,用於轉送規則,然後繼續閱讀下一節「將流量重新導向至 HTTPS 負載平衡器」。
如果是跨區域內部應用程式負載平衡器,請按照「使用 VM 執行個體群組後端設定跨區域內部應用程式負載平衡器」一文的說明建立兩個負載平衡器,然後按照「將流量重新導向至 HTTPS 負載平衡器」一文的說明操作。
將流量重新導向至 HTTPS 負載平衡器
建立部分 HTTP 負載平衡器,其 IP 位址與先前步驟中建立的 HTTPS 負載平衡器相同。部分負載平衡器會將流量從通訊埠 80
重新導向至通訊埠 443
。
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 在「跨區域或單一區域部署」部分,選取「最適合區域工作負載」,然後點選「Next」。
- 按一下 [設定]。
基本設定
- 在負載平衡器的名稱中輸入
l7-ilb-http-redirect
。 - 在「Region」(區域) 中選取
us-west1
。 - 在「Network」(網路) 中選取
lb-network
。
設定後端服務
- 按一下「後端設定」。
- 在「Select backend services」選單中,選取現有的後端服務
l7-ilb-backend-service
。 - 按一下「確定」。
設定網址對應
- 按一下「轉送規則」。
- 針對「Mode」,請選取「Advanced host and path rule」。
- 按一下 [Add host and path rule] (新增主機與路徑規則)。
將「Hosts」設為
*
。在「路徑比對器 (比對項目、動作和服務)」部分,輸入以下程式碼:
name: matcher1 defaultUrlRedirect: httpsRedirect: true hostRedirect: IP_ADDRESS:443 redirectResponseCode: PERMANENT_REDIRECT
確保
l7-ilb-backend-service
是任何不相符主機和路徑的唯一後端服務。
如要瞭解流量管理,請參閱「為內部應用程式負載平衡器設定流量管理」。
設定 HTTP 適用的前端
- 按一下「前端設定」。
- 將轉送規則的名稱設為
l7-ilb-forwarding-rule
。 - 將「Protocol」(通訊協定) 設為
HTTP
。 - 將「子網路」設為
backend-subnet
。 - 將「Port」(通訊埠) 設為
80
。 - 在「IP 位址」選單中,選取為 HTTPS 負載平衡器轉送規則保留的共用 IP 位址。
- 按一下 [完成]。
檢閱設定
- 按一下「檢查並完成」。
- 查看負載平衡器設定。
- 選用:按一下「等效程式碼」,查看用來建立負載平衡器的 REST API 要求。
- 按一下 [建立]。
gcloud
建立網址對應,方法是建立含有流量重新導向設定的 YAML 檔案。將 IP_ADDRESS 替換為為 HTTPS 負載平衡器轉送規則預留的共用 IP 位址。
defaultService: regions/us-west1/backendServices/l7-ilb-backend-service kind: compute#urlMap name: l7-ilb-redirect-url-map hostRules: - hosts: - '*' pathMatcher: matcher1 pathMatchers: - name: matcher1 defaultUrlRedirect: hostRedirect: IP_ADDRESS:443 redirectResponseCode: PERMANENT_REDIRECT httpsRedirect: True
將 YAML 檔案匯入新網址對應:
gcloud compute url-maps import l7-ilb-redirect-url-map \ --source=/tmp/url_map.yaml \ --region=us-west1
建立 HTTP 負載平衡器的目標 Proxy:
gcloud compute target-http-proxies create l7-ilb-http-proxy \ --url-map=l7-ilb-redirect-url-map \ --region=us-west1
建立新的轉送規則和共用 IP 位址:
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=IP_ADDRESS \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-http-proxy \ --target-http-proxy-region=us-west1
測試流量重新導向
連線至用戶端 VM。
gcloud compute ssh l7-ilb-client-us-west1-a \ --zone=us-west1-a
將 HTTP 要求傳送至連接埠
80
上的 IP_ADDRESS,並預期流量會重新導向。curl -L -k IP_ADDRESS
查看輸出內容範例。
Page served from: l7-ilb-backend-w11t
新增
-vvv
即可查看更多詳細資料。curl -L -k IP_ADDRESS -vvv
- Rebuilt URL to: IP_ADDRESS/
- Trying IP_ADDRESS...
- TCP_NODELAY set
- Connected to IP_ADDRESS (IP_ADDRESS) port 80 (#0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / > < HTTP/1.1 308 Permanent Redirect < location: https://IP_ADDRESS:443/ < date: Fri, 07 Aug 2020 05:07:18 GMT < via: 1.1 google < content-length: 0 <
- Curl_http_done: called premature == 0
- Connection #0 to host IP_ADDRESS left intact
- Issue another request to this URL: 'https://IP_ADDRESS:443/'
- Trying IP_ADDRESS...
- TCP_NODELAY set
- Connected to IP_ADDRESS (IP_ADDRESS) port 443 (#1)
- ALPN, offering h2
- ALPN, offering http/1.1
- Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
- successfully set certificate verify locations:
- CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs ... ...
- SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
- ALPN, server accepted to use h2
- Server certificate:
- subject: O=Google TESTING; CN=test_cert_1
- start date: Jan 1 00:00:00 2015 GMT
- expire date: Jan 1 00:00:00 2025 GMT
- issuer: O=Google TESTING; CN=Intermediate CA
- SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
- Using HTTP2, server supports multi-use
- Connection state changed (HTTP/2 confirmed)
- Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
- Using Stream ID: 1 (easy handle 0x561a6b0e3ea0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / >
- Connection state changed (MAX_CONCURRENT_STREAMS updated)! < HTTP/2 200 < date: Fri, 07 Aug 2020 05:07:18 GMT < server: Apache/2.4.25 (Debian) < last-modified: Thu, 06 Aug 2020 13:30:21 GMT < etag: "2c-5ac357d7a47ec" < accept-ranges: bytes < content-length: 44 < content-type: text/html < via: 1.1 google < Page served from: l7-ilb-backend-https-w11t
- Curl_http_done: called premature == 0
- Connection #1 to host IP_ADDRESS left intact
後續步驟
如要瞭解內部應用程式負載平衡器的運作方式,請參閱「內部應用程式負載平衡器總覽」。
如要管理內部應用程式負載平衡器所需的僅限 Proxy 子網路資源,請參閱「內部應用程式負載平衡器的 Proxy 專用子網路」一文。