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 值區的包裝函式
後端值區支援下列功能:
如要瞭解 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
替換為您的 Google Cloud專案 ID。
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
建立 Cloud Storage 值區
如果您有尚未指派給負載平衡器的 Cloud Storage 值區,可以直接跳到下一個步驟。
建立 Cloud Storage 值區做為 Cloud CDN 外部應用程式負載平衡器的後端時,建議您選擇多區域值區,這樣系統就會自動在多個 Google Cloud 區域複製物件。這麼做可以提升內容的可用性,並改善應用程式的容錯能力。
主控台
- 在 Google Cloud 控制台,開啟「Cloud Storage 值區」頁面。
- 點選「建立值區」。
在下表中指定欄位的值,其他欄位則保留預設值。
屬性 值 (依指示輸入值或選取選項) 名稱 為每個值區輸入全域不重複的名稱。如果輸入的名稱不具唯一性,系統會顯示訊息,提示您嘗試其他名稱。 位置類型 多區域 位置 選取區域,例如「美國 (多個美國地區)」。 預設儲存空間級別 標準 存取權控管 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
如要建立值區,請使用 google_storage_bucket
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
將圖形檔案複製到 Cloud Storage 值區
如要測試設定,請將圖形檔案從公開 Cloud Storage 值區複製到自己的 Cloud Storage 值區。
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 值區設為公開
這個範例會將 Cloud Storage 值區設為可公開讀取。這是建議的公開內容處理方式。設定這個選項後,網際網路上的任何使用者都能查看及列出您的物件和中繼資料,但 ACL 除外。為降低意外洩漏資料的風險,您通常應為公開物件專用特定 Cloud Storage 值區。
以下是將整個 Cloud Storage 值區設為公開的替代做法:
將個別物件設為可公開讀取。我們不建議採用這種做法,因為這會使用舊版 Cloud Storage 專屬的權限系統。
使用已簽署的網址。
下列程序會向所有使用者授予 Cloud Storage 值區中物件的檢視權限,讓值區可供公開讀取。
主控台
- 在 Google Cloud 控制台,開啟「Cloud Storage 值區」頁面。
- 前往值區,然後按一下「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 位址,請按一下「預約靜態位址」。
- 將
example-ip
的「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 指令」。
建立外部應用程式負載平衡器
在這個程序中,您會建立負載平衡器的後端值區,做為 Cloud Storage 值區的包裝函式。建立或編輯後端值區時,您可以啟用 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 憑證 選取憑證或建立新憑證 按一下 [完成]。
檢閱設定
- 按一下「檢查並完成」。
- 查看「後端值區」、「主機與路徑規則」和「前端」部分。
- 按一下 [建立]。
- 等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (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
設定轉送規則
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
load-balancing-scheme=EXTERNAL_MANAGED
。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
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」(後端) 區段中,確認後端值區健康狀態良好。後端桶旁應會顯示綠色勾號。如果看到其他資訊,請先嘗試重新載入頁面。 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
頁面多次,應會出現多個快取命中。
以下記錄項目顯示快取命中。如要在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」(後端) 區段中,確認後端值區健康狀態良好。後端桶旁應會顯示綠色勾號。如果看到其他資訊,請先嘗試重新載入頁面。 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
標頭大於 0。
需要在 TTL 前重新整理的內容,可以失效,並從 Cloud Storage 重新擷取。
停用 Cloud CDN
主控台
為單一後端值區停用 Cloud CDN
- 前往 Google Cloud 控制台的「Cloud CDN」頁面。
- 在來源列的右側,按一下「Menu」圖示 ,然後選取「Edit」。
- 取消勾選要停止使用 Cloud CDN 的所有後端值區。
- 按一下「更新」。
為來源移除所有後端值區的 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 是否從快取提供回應,請參閱「查看記錄」。
- 如需常見問題和解決方案的相關資訊,請參閱疑難排解。
- 如要為內容設定篩選和存取權控管政策,請參閱Edge 安全政策。