用戶經常有使用 Cloud CDN 支援外部來源的快取需求,而其 CDN 來源可能位於地端自有機房,或是其他非 Google Cloud (GCP) 的雲端。以往在這種情形下,用戶只能透過 GCP VM 自行搭建 Reverse Proxy 做為 HTTP(S)負載平衡器的後端服務 (back-end services) 來達成。
現在,Cloud CDN 可以透過 GCP Console 設定網路端點群組 Network Endpoint Group (NEG) 輕鬆支援外部來源快取的需求。本文將手把手帶您進行相關設定。
在建立 Custom Origin 之前,以下我們先條列「使用 Cloud CDN Custom Origin 的相關限制」:
相關限制
Network Endpoint Group(網路端點群組)
- FQDN 定義的 Internet endpoint(地端機房或是其他雲端 host)只能被 Google Public DNS 解析。
- Internet endpoint 需要為公開網路所能連線的 IPv4 位址:
- Internet endpoint 不能是 RFC 1918 位址(私有 IP 位址)
- Internet endpoint 不能透過 Cloud VPN 或是 Cloud Interconnect 連線,只能透過公開網路連線。
- 假如 Internet endpoint 有使用 Google 的 API 或是 service,則該 service 需要開放 TCP 80, 443 port,並且能以 HTTP, HTTPS 或者 HTTP/2 協定連線至該 service。
- Internet NEGs 只能服務在 Premium network service tier(預設的層級)
- 需要遵照 endpoint 的各個格式
- INTERNET_IP_PORT 的格式,IP:{optional port}
- INTERNET_FQDN_PORT 的格式,FQDN:{optional port}
- 當使用任一 endpoint 類型(FQDN or IP) 時,您只能加入一個 endpoint 至 NEG。也就是當使用 FQDN 或是 IP endpoint 作為 backendService 時,您不能加入多個 NEG 至該 backendService。
- 目前 internet endpoints 並不支援負載平衡,也就是使用者的請求只會 proxy 至 endpoint。Google Edge 基礎設施會切斷使用者的 connection,並把該 connection 直接導至 internet endpoint。
- Internet NEGs 不一定要搭配 Cloud CDN。
- Internet NEGs 並沒有 health check 的機制,假如您的 internet endpoint 無法繼續服務或是 FQDN 無法被解析,則 Cloud CDN 就會回覆 502 (Bad Gateway) 給使用者。
- 關於 資源是否能被 Cloud CDN 快取的詳細限制請參考這份文件。
設定方式
設定方式如下:
一、建立 Network Endpoint Group (NEG)
- 進入 GCP Console 的 NEG 頁面,點擊 CREATE NETWORK ENDPOINT GROUP
- Network endpoint group type 選擇 Network endpoint group (internet)
- Default port 輸入 443 (假如還沒有要設定 SSL 可以先設定 80 port 作為測試)
- Add through 選擇 FQDN
- FQDN name 填入想要支援的 domain name
二、建立 HTTP(S) Load Balancer & Backend Service
- 進入 GCP Console 的 Load Balancing 頁面,點擊 CREATE LOAD BALANCER
- 選擇 HTTP(S) Load Balancing 並開始設置
- Internet facing 選擇 From Internet to my VMs
- Backend configuration
- 建立一組 Backend Service
- Backend type 選擇 Internet network endpoint group
- New backend 選擇剛剛建立的那組 NEG
- Protocol 選擇 HTTPS
- 選擇啟用 Cloud CDN
- 展開 advanced configurations,設定 Custom request headers(如果 origin server 會透過 HTTP Request Host Header 處理請求的話,就必須在 Load Balancer 的 Backend Service 設置 Host Header,讓 origin server 可以辨識並分配請求)
- 建立一組 Backend Service
- Frontend configuration
- Review and finalize
選擇 Review and finalize 確認設定無誤 - 點擊 Create 完成建立 HTTP(S) Load Balancer建立完後需要等待 10-15 分鐘,GCP 要把您所設定的資訊同步至全球的 Network Endpoints
三、設定 Domain
透過 DNS 服務將你指定的 domain name 設定到先前建立的 HTTP(S) Load Balancer 的 IP address,也就是設定 DNS 服務的 A record 指向 Load Balancer 的 IP address。
這邊指到 Load Balancer 的 Domain name 跟前方設定的 Host 的 your.domain.name 是不同的。your.domain.name 是存放 CDN Origin 的 domain。此步驟設定的是 Load Balancer 的 domain。
四、測試
- 使用瀏覽器或 curl 連接到 CDN 指定的 domain name 測試請求。為了測試 CDN 是否有 cache 到,需要發送多次請求至該 domain name。
curl https://loadbalancer.domain.name - 測試請求後,可以在 Cloud CDN 的 Monitoring 及 Cache invalidation 頁面檢查流量及 cache 資訊。前往 Cloud Monitoring > Metrics Explorer,並選取以下參數來查看 cache 的資訊。Resource Type: https_lb_rule
Metric: loadbalancing.googleapis.com/https/backend_response_bytes_count
Group by: cache_result