Cloud CDN 會利用您選擇的全域外部應用程式負載平衡器或傳統版應用程式負載平衡器,提供轉送、健康狀態檢查和 Anycast IP 支援。由於全域外部應用程式負載平衡器可以有多種後端執行個體類型 (Compute Engine VM 執行個體、Google Kubernetes Engine Pod、Cloud Storage 值區或 Google Cloud外部的後端),因此您可以選擇要為哪些後端 (來源) 啟用 Cloud CDN。
本設定指南說明如何建立已啟用 Cloud CDN 的外部應用程式負載平衡器。本範例使用下列資源:
- 預設虛擬私有雲 (VPC) 網路
- 預設網址對應
- 預留的外部 IP 位址
- 以 Cloud Storage 值區做為後端
- 單一負載平衡器後端值區,做為 Cloud Storage 值區的包裝函式
後端 bucket 支援下列項目:
如要瞭解 Cloud CDN 的運作方式,請參閱 Cloud CDN 總覽。
根據預設,Cloud Storage 會使用與 Cloud CDN 相同的快取。在後端值區啟用 Cloud CDN 後,您就能使用 Cloud CDN 控制項管理內容。Cloud CDN 控制項包括快取模式、已簽署網址和撤銷等。Cloud CDN 也可快取大型內容 (超過 10 MB)。如果未在後端值區啟用 Cloud CDN,您只能使用來源 Cache-Control
標頭,控管 Cloud Storage 中繼資料設定的較小內容快取。
負載平衡器後端
外部應用程式負載平衡器會利用網址對應,將來自指定網址的流量導向指定服務。下表摘要說明可代管內容和服務的後端類型。
負載平衡器後端設定 | 一般媒體類型 | 後端類型 |
---|---|---|
後端服務 | 動態 (例如資料) |
|
後端值區 | 靜態 (例如圖片) |
|
事前準備
- 如果前端使用 HTTPS,請建立 SSL 憑證,可以是自行管理或 Google 代管。建議使用 Google 代管的憑證。
- 如果您使用 Google Cloud CLI,請參閱「使用 gcloud 工具探索物件儲存空間」一文,瞭解如何安裝。
主控台
- 前往 Google Cloud 控制台的「首頁」頁面。
- 在 Google Cloud的右邊,從下拉式選單中選取專案。
gcloud
gcloud config set project PROJECT_ID
將 PROJECT_ID
替換為專案 ID。 Google Cloud
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
建立 Cloud Storage 值區
如果您有現成但尚未指派給負載平衡器的 Cloud Storage bucket,可以跳到下一個步驟。
建立 Cloud Storage 值區做為外部應用程式負載平衡器的後端時,建議您選擇多區域值區,系統會自動在多個 Google Cloud 區域中複製物件。這有助於提高內容的可用性,並提升應用程式的容錯能力。
主控台
- 在 Google Cloud 控制台,開啟「Cloud Storage bucket」頁面。
- 點選「建立值區」。
指定下表中的欄位值,其他欄位則保留預設值。
屬性 值 (按照指示輸入值或選取選項) 名稱 為每個 bucket 輸入全域不重複的名稱。如果輸入的名稱不重複,系統會顯示訊息,請嘗試其他名稱。 位置類型 多區域 位置 選取區域,例如「美國 (多個美國地區)」。 預設儲存空間級別 標準 存取權控管 Uniform 點選「建立」。
請記下新建立的 Cloud Storage 值區名稱,以便在後續步驟中使用。
gcloud
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Terraform
如要建立 bucket,請使用 google_storage_bucket
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
將圖像檔案複製到 Cloud Storage bucket
為了方便您測試設定,請將圖像檔案從公開的 Cloud Storage bucket 複製到自己的 Cloud Storage bucket。
gcloud
在 Cloud Shell 中執行下列指令。將 BUCKET_NAME
替換為專屬 Cloud Storage 值區名稱:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
如要複製物件,請使用 gcloud storage cp
指令搭配 local-exec
Provisioner
。
resource "null_resource" "upload_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive" } }
或者,如要上傳物件,請使用 google_storage_bucket_object
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Google Cloud 控制台點按「Refresh」(重新整理),確認圖像檔案已複製完成。
將 Cloud Storage bucket 設為公開
這個範例會將 Cloud Storage bucket 設為可公開讀取。建議您採用這種方式處理公開內容。設定完成後,網際網路上的任何使用者都能查看及列出您的物件和中繼資料 (ACL 除外)。為降低資料意外曝光的風險,您通常應為公開物件專門建立 Cloud Storage bucket。
以下是將整個 Cloud Storage bucket 設為公開的替代做法:
將個別物件設為可公開讀取。 我們不建議採用這種做法,因為這會使用舊版 Cloud Storage 專屬的授權系統。
使用已簽署的網址。
下列程序會授予所有使用者 Cloud Storage bucket 中物件的檢視權限,讓 bucket 可供公開讀取。
主控台
- 在 Google Cloud 控制台,開啟「Cloud Storage bucket」頁面。
- 前往值區,然後按一下「Permissions」(權限) 分頁標籤。
- 按一下「新增主體」。
- 在「New principals」(新增主體) 部分輸入
allUsers
。 - 在角色部分,依序選取「Cloud Storage」>「Storage 物件檢視者」。
- 按一下 [儲存]。
gcloud
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
如要將 Cloud Storage bucket 設為公開,請使用 google_storage_bucket_iam_member
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
保留外部 IP 位址
現在 Cloud Storage 值區已開始執行,請設定全域靜態外部 IP 位址,讓客戶可透過該位址連線至負載平衡器。
這個步驟為選用步驟,但我們建議您執行,因為靜態外部 IP 位址會提供單一地址,讓您指向網域。
主控台
- 前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
- 如要預留 IPv4 位址,請按一下「Reserve static address」(預約靜態位址)。
- 將「Name」(名稱) 指派為
example-ip
。 - 將「Network Service Tier」(網路服務級別) 設為「Premium」(進階級)。
- 將「IP version」(IP 版本) 設為「IPv4」。
- 將「Type」(類型) 設為「Global」(通用)。
- 按一下「保留」。
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
請注意預留的 IPv4 位址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
如要保留 IP 位址,請使用 google_compute_global_address
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
建立外部應用程式負載平衡器
在本程序中,您會建立負載平衡器的後端 bucket,做為 Cloud Storage bucket 的包裝函式。建立或編輯後端值區時,您可以啟用 Cloud CDN。
主控台
啟動外部應用程式負載平衡器設定程序
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 在「HTTP(S) load balancing」(HTTP(S) 負載平衡) 之下,按一下 [Start configuration] (啟動設定)。
- 選取「From Internet to my VMs」(從網際網路到我的 VM),然後按一下「Continue」(繼續)。
- 在「進階流量管理」下方,選取下列其中一個選項:
- 如果是傳統版應用程式負載平衡器,請選取「傳統版 HTTP(S) 負載平衡器」。
- 如果是全域外部應用程式負載平衡器,請選取「具備進階流量管理的 HTTP(S) 負載平衡器」。
- 將「Name」(名稱) 設為
http-lb
,然後前往下一個步驟。
設定後端並啟用 Cloud CDN
建立負載平衡器的後端值區,做為 Cloud Storage 值區的包裝函式。建立或編輯後端值區時,您可以啟用 Cloud CDN。
- 按一下「後端設定」。
- 在「後端服務和後端值區」下方,依序點選「建立或選取後端服務和後端值區」>「後端值區」>「建立後端值區」。
- 將「Name」(名稱) 設為
cat-backend-bucket
。這個名稱不必是全域不重複,也不必與實際的 Cloud Storage 值區名稱相同。 - 在「Cloud Storage bucket」(Cloud Storage 值區) 下方,按一下「Browse」(瀏覽)。
- 選取您建立的 Cloud Storage 全域專屬
BUCKET_NAME
,然後按一下「選取」。 按一下「啟用 Cloud CDN」。
點選「建立」。
設定主機規則和路徑比對器
主機規則和路徑比對器是外部應用程式負載平衡器的網址對應設定元件。
在「Host and path rules」(主機與路徑規則) 中,您可以保留預設設定。
如需自訂設定範例,請參閱將後端值區新增至負載平衡器。
如要進一步瞭解主機規則和路徑比對器,請參閱網址對應總覽。
設定前端
- 按一下「前端設定」。
確認選項已設為指定的值。
屬性 值 (按照指示輸入值或選取選項) 通訊協定 HTTP 網路服務級別 進階 IP 版本 IPv4 IP 位址 example-ip
通訊埠 80 如要建立 HTTPS 負載平衡器,而非 HTTP 負載平衡器,您必須具備 SSL 憑證 (
gcloud compute ssl-certificates list
),並填寫下列欄位。屬性 值 (按照指示輸入值或選取選項) 通訊協定 HTTPS 網路服務級別 進階 IP 版本 IPv4 IP 位址 example-ip
通訊埠 443 憑證 選取憑證或建立新憑證 按一下 [完成]。
檢閱設定
- 按一下「檢查並完成」。
- 檢查「Backend buckets」(後端值區)、「Host and path rules」(主機與路徑規則) 和「Frontend」(前端) 部分。
- 點選「建立」。
- 等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (http-lb)。
- 記下負載平衡器的 IP 位址,以便在下一項工作中使用。這稱為
IP_ADDRESS
。
gcloud
設定後端
gcloud compute backend-buckets create cat-backend-bucket \ --gcs-bucket-name=BUCKET_NAME \ --enable-cdn \ --cache-mode=CACHE_MODE
將 CACHE_MODE 替換為下列其中一個選項,設定快取模式:
CACHE_ALL_STATIC
或USE_ORIGIN_HEADERS
:使用根據 Cloud Storage 中快取控制中繼資料設定的標頭。Cloud Storage 一律會向 Cloud CDN 提供Cache-Control
標頭。 如果未明確選擇值,系統會傳送預設值。FORCE_CACHE_ALL
:快取所有內容,忽略 Cloud Storage 傳送的Cache-Control
回應標頭中的任何private
、no-store
或no-cache
指令。
設定網址對應
gcloud compute url-maps create http-lb \ --default-backend-bucket=cat-backend-bucket
設定目標 Proxy
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
設定轉送規則
-
如果是全域外部應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL_MANAGED
的 gcloud CLI 指令。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL
。
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
設定後端
如要設定後端,請使用 google_compute_backend_bucket
資源。
設定網址對應
如要設定後端,請使用 google_compute_url_map
資源。
設定目標 Proxy
如要設定目標 Proxy,請使用 google_compute_target_http_proxy
資源或 google_compute_target_https_proxy
資源。
設定轉送規則
如要設定轉送規則,請使用 google_compute_global_forwarding_rule
資源。
- 如果是全域外部應用程式負載平衡器,請搭配使用
load_balancing_scheme="EXTERNAL_MANAGED"
。 這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
load_balancing_scheme="EXTERNAL"
。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
將流量傳送至後端 bucket
建立全域轉送規則後,可能需等待數分鐘時間,才能讓您的設定傳播到全世界。幾分鐘後,您就可以開始將流量傳送至負載平衡器的 IP 位址。
主控台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
按一下
http-lb
,展開您剛建立的負載平衡器。在「Backend」(後端) 區段中,確認後端 bucket 健康狀態良好。後端 bucket 旁應會顯示綠色勾號。如看到其他資訊,請先嘗試重新載入頁面。 Google Cloud 主控台可能需要一段時間,才會顯示後端健康狀態良好。
Google Cloud 控制台顯示後端值區健康後,您可以前往
http://IP_ADDRESS/never-fetch/three-cats.jpg
,使用網路瀏覽器測試負載平衡器。將IP_ADDRESS
替換為負載平衡器的 IP 位址。瀏覽器應該會顯示含有圖片檔案的頁面。
gcloud
使用 curl
指令測試網址的回應。請將 IP_ADDRESS
改為負載平衡器的 IPv4 位址。
請注意預留的 IPv4 位址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
傳送 curl 要求:
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
確認 Cloud CDN 是否正常運作
如果快速連續重新載入http://IP_ADDRESS/never-fetch/three-cats.jpg
頁面http://IP_ADDRESS/never-fetch/three-cats.jpg
數次,應該會出現多次快取命中。
下列記錄項目顯示快取命中。如要查看快取命中次數,請開啟記錄檔探索工具,然後依轉送規則名稱篩選,即可在Google Cloud 控制台中查看。
記錄檔探索工具
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg" requestSize: "577" status: 254 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:25.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:25.588272510Z" spanId: "7b6537d3672e08e1" }
主控台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
按一下
http-lb
,展開您剛建立的負載平衡器。在「Backend」(後端) 區段中,確認後端 bucket 健康狀態良好。後端 bucket 旁應會顯示綠色勾號。如看到其他資訊,請先嘗試重新載入頁面。 Google Cloud 主控台可能需要一段時間,才會顯示後端健康狀態良好。
Google Cloud 控制台顯示後端值區健康後,您可以前往
http://IP_ADDRESS/never-fetch/three-cats.jpg
,使用網路瀏覽器測試負載平衡器。將IP_ADDRESS
替換為負載平衡器的 IP 位址。瀏覽器應該會顯示含有圖片檔案的頁面。
gcloud
使用 curl
指令測試網址的回應。請將 IP_ADDRESS
改為負載平衡器的 IPv4 位址。
請注意預留的 IPv4 位址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
傳送 curl 要求:
curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg
內容會從 Cloud Storage 擷取,由 Cloud CDN 快取,然後在內容過期或從快取中移除時,經過驗證並重新擷取。
快取中的內容具有大於零的 Age
標頭。
如果內容需要在 TTL 之前重新整理,可以失效並從 Cloud Storage 重新擷取。
停用 Cloud CDN
主控台
為單一後端 bucket 停用 Cloud CDN
- 前往 Google Cloud 控制台的「Cloud CDN」頁面。
- 在來源列的右側,按一下「選單」 ,然後選取「編輯」。
- 取消勾選要停止使用 Cloud CDN 的任何後端值區。
- 按一下「更新」。
為來源的所有後端 bucket 移除 Cloud CDN
- 前往 Google Cloud 控制台的「Cloud CDN」頁面。
- 在來源列的右側,依序按一下「選單」 「移除」。
- 按一下 [移除] 加以確認。
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \ --no-enable-cdn
停用 Cloud CDN 並不會撤銷或清除快取內容。如果您在停用 Cloud CDN 後重新啟用這項服務,原有的大部分或所有快取內容應仍會保留在快取中。如果您不希望快取使用這些內容,則必須撤銷快取內容。
後續步驟
- 如要瞭解快取的內容,請參閱快取總覽。
- 如要在 GKE 中使用 Cloud CDN,請參閱「Ingress 功能」。
- 如要確認 Cloud CDN 是否從快取提供回應,請參閱查看記錄。
- 如要瞭解常見問題和解決方案,請參閱「疑難排解」一節。
- 如要設定內容的篩選和存取權控管政策,請參閱邊緣安全政策。