Cloud CDN 會利用您選擇的全域外部或傳統版應用程式負載平衡器,提供轉送、健康狀態檢查和任意傳播 IP 支援。由於全域外部應用程式負載平衡器支援多種後端執行個體類型 (Compute Engine VM 執行個體、Google Kubernetes Engine Pod、Cloud Storage bucket 或 Google Cloud外部的後端),因此您可選擇哪些後端 (即「來源」) 要啟用 Cloud CDN。
本設定指南說明如何建立啟用 Cloud CDN 的外部應用程式負載平衡器。範例會採用下列資源:
- 預設虛擬私有雲 (VPC) 網路
- 一個預設網址對應
- 一個預留的外部 IP 位址
- 一個 Cloud Storage bucket,設為後端
- 單一負載平衡器後端 bucket,設為 Cloud Storage bucket 的 wrapper
後端 bucket 支援下列項目:
如要瞭解 Cloud CDN 的運作方式,請參閱「Cloud CDN 總覽」。
根據預設,Cloud Storage 會使用與 Cloud CDN 相同的快取。在後端 bucket 啟用 Cloud CDN 後,就能使用 Cloud CDN 控制項來管理內容。Cloud CDN 控制項包括快取模式、已簽署的網址和撤銷。Cloud CDN 也可快取大型內容 (大於 10 MB)。如果沒有在後端 bucket 啟用 Cloud CDN,您只能依 Cloud Storage 中繼資料的設定,使用來源 Cache-Control 標頭控管小型內容的快取。
負載平衡器後端
外部應用程式負載平衡器會利用網址對應,將來自指定網址的流量導向指定服務。下表彙整可託管內容和服務的後端類型。
| 負載平衡器後端設定 | 常見媒體類型 | 後端類型 |
|---|---|---|
| 後端服務 | 動態 (例如資料) |
|
| 後端 bucket | 靜態 (例如圖片) |
|
事前準備
- 如果前端使用 HTTPS,請建立自行管理或 Google 代管的 SSL 憑證,建議使用 Google 代管的憑證。
- 如果是使用 Google Cloud CLI,請參閱「使用 gcloud 工具探索物件儲存空間」,瞭解安裝方式。
控制台
- 前往 Google Cloud 控制台的「Home」(首頁)。
- 從 Google Cloud右邊的下拉式選單中選取專案。
gcloud
gcloud config set project PROJECT_ID
將 PROJECT_ID 替換為您的 Google Cloud專案 ID。
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
選用:使用 BYOIP 位址
如要使用自己的 IP (BYOIP),可將您的公開位址匯入Google Cloud ,與 Google Cloud 資源搭配使用。舉例來說,如果您匯入了多個自己的 IPv4 位址,設定負載平衡器時,就可以將其中一個位址指派給轉送規則。按照本文的操作說明建立外部應用程式負載平衡器時,請在「IP 位址」欄位提供 BYOIP 位址。
如要進一步瞭解如何使用 BYOIP,請參閱「使用自己的 IP 位址」。
建立 Cloud Storage bucket
如果您已有 Cloud Storage bucket,但尚未指派給負載平衡器,可以跳到下一個步驟。
建立 Cloud Storage bucket,並設為外部應用程式負載平衡器 (採用 Cloud CDN) 的後端時,建議選擇一個多區域 bucket,讓系統自動在多個 Google Cloud 區域中複製物件。這麼做有助於提高內容可用性,並提升應用程式的容錯能力。
控制台
- 開啟 Google Cloud 控制台的「Cloud Storage bucket」頁面。
- 點選「Create bucket」(建立 bucket)。
為下表中的欄位指定值,其他欄位請保留預設值。
屬性 值 (依指示輸入值或選取選項) 名稱 為每個 bucket 輸入全域不重複的名稱。請注意,如果輸入的名稱重複,系統會顯示訊息,要求改用其他名稱。 位置類型 Multi-region 位置 選取區域,例如「us (multiple regions in United States)」(us (多個美國區域))。 預設儲存空間級別 Standard 存取控管 Uniform 按一下「Create」(建立)。
請記下新建立的 Cloud Storage bucket 名稱,後續步驟中會用到。
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 bucket 名稱:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
如要複製物件,請使用 local-exec
Provisioner 搭配 gcloud storage cp 指令。
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」頁面。
- 前往 bucket,然後按一下「Permissions」(權限) 分頁標籤。
- 按一下「Add principals」(新增主體)。
- 在「New principals」(新增主體) 中輸入
allUsers。 - 角色請依序選取「Cloud Storage」>「Storage Object Viewer」(Storage 物件檢視者)。
- 按一下「Save」(儲存)。
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 bucket 已開始運作,請設定全域靜態外部 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」(通用)。
- 按一下「Reserve」(預留)。
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 的 wrapper。建立或編輯後端 bucket 時,您可以啟用 Cloud CDN。
控制台
啟動外部應用程式負載平衡器設定程序
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 在「HTTP(S) load balancing」(HTTP(S) 負載平衡) 下方,按一下「Start configuration」(開始設定)。
- 選取「From Internet to my VMs」(從網際網路到我的 VM),然後按一下「Continue」(繼續)。
- 在「Advanced traffic management」(進階流量管理) 下方,選取下列任一做法:
- 如果使用傳統版應用程式負載平衡器,請選取「Classic HTTP(S) Load Balancer」(傳統版 HTTP(S) 負載平衡器)。
- 如果使用全域外部應用程式負載平衡器,請選取「HTTP(S) Load Balancer with Advanced Traffic Management」(具備進階流量管理功能的 HTTP(S) 負載平衡器)。
- 將「Name」(名稱) 設為
http-lb,然後執行下一個步驟。
設定後端並啟用 Cloud CDN
建立負載平衡器的後端 bucket,並設為 Cloud Storage bucket 的 wrapper。建立或編輯後端 bucket 時,您可以啟用 Cloud CDN。
- 按一下「Backend configuration」(後端設定)。
- 在「Backend services & backend buckets」(後端服務和後端 bucket) 下方,依序點選「Create or select backend services & backend buckets」(建立或選取後端服務和後端 bucket) >「Backend buckets」(後端 bucket) >「Create a backend bucket」(建立後端 bucket)。
- 將「Name」(名稱) 設為
cat-backend-bucket。這個名稱無需全域不重複,也不必與實際的 Cloud Storage bucket 名稱相同。 - 在「Cloud Storage bucket」下方,按一下「Browse」(瀏覽)。
- 選取您建立的 Cloud Storage 全域不重複
BUCKET_NAME,然後按一下「Select」(選取)。 按一下「Enable Cloud CDN」(啟用 Cloud CDN)。
按一下「Create」(建立)。
設定主機規則和路徑比對器
主機規則和路徑比對器是外部應用程式負載平衡器的網址對應設定元件。
您可以保留「Host and path rules」(主機與路徑規則) 的預設設定。
如需自訂設定範例,請參閱「將後端 bucket 新增至負載平衡器」。
如要進一步瞭解主機規則和路徑比對器,請參閱「網址對應總覽」。
設定前端
- 按一下「Frontend configuration」(前端設定)。
確認各選項已設為下列值。
屬性 值 (依指示輸入值或選取選項) 通訊協定 HTTP 網路服務級別 Premium IP 版本 IPv4 IP 位址 example-ip通訊埠 80 如要建立 HTTPS 負載平衡器,而非 HTTP 負載平衡器,您必須具備 SSL 憑證 (
gcloud compute ssl-certificates list),並填入下列欄位。屬性 值 (依指示輸入值或選取選項) 通訊協定 HTTPS 網路服務級別 Premium IP 版本 IPv4 IP 位址 example-ip通訊埠 443 憑證 選取憑證或建立新憑證 按一下「Done」(完成)。
檢查設定
- 按一下「Review and finalize」(檢查並完成)。
- 檢查「Backend buckets」(後端 bucket)、「Host and path rules」(主機與路徑規則) 和「Frontend」(前端) 的設定。
- 按一下「Create」(建立)。
- 等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (http-lb)。
- 記下負載平衡器的 IP 位址,下一項任務中會用到。之後會用
IP_ADDRESS來稱呼這個 IP 位址。
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」(後端) 部分,確認後端 bucket 健康狀態良好,後端 bucket 旁應該會顯示綠色勾號。如果顯示其他內容,請先嘗試重新載入頁面。 Google Cloud 控制台可能需要一段時間,才會顯示後端健康狀態良好。
Google Cloud 控制台顯示後端 bucket 健康狀態良好後,您可以前往
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 控制台中查看快取命中次數,請開啟 Logs Explorer,然後依轉送規則名稱篩選。
Logs Explorer
{
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 控制台顯示後端 bucket 健康狀態良好後,您可以前往
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 標頭大於零。
如果需要在存留時間之前更新內容,可以設為失效再從 Cloud Storage 重新擷取。
停用 Cloud CDN
控制台
為單一後端 bucket 停用 Cloud CDN
- 前往 Google Cloud 控制台的「Cloud CDN」頁面。
- 點選來源列右側的「Menu」(選單) ,然後選取「Edit」(編輯)。
- 找到要停止使用 Cloud CDN 的後端 bucket,取消勾選其核取方塊。
- 按一下「Update」(更新)。
為特定來源的所有後端 bucket 移除 Cloud CDN
- 前往 Google Cloud 控制台的「Cloud CDN」頁面。
- 點選來源列右側的「Menu」(選單) ,然後選取「Remove」(移除)。
- 按一下「Remove」(移除) 確認操作。
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
--no-enable-cdn
停用 Cloud CDN 並不會撤銷或清除快取內容。如果您在停用 Cloud CDN 後重新啟用這項服務,原有的大部分或所有快取內容可能仍會保留在快取中。如果您不希望快取使用這些內容,必須撤銷快取內容。
後續步驟
- 如要瞭解系統會快取哪些內容,請參閱快取總覽。
- 如要在 GKE 中使用 Cloud CDN,請參閱「Ingress 功能」。
- 如要確認 Cloud CDN 是否從快取提供回應,請參閱「查看記錄」。
- 如要瞭解常見問題和解決方案,請參閱「疑難排解」。
- 如要設定內容的篩選和存取控管政策,請參閱「邊緣安全政策」。