【手把手教學】Cloud CDN 連接外部來源 Custom Origin

用戶經常有使用 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)

  1. 進入 GCP Console 的 NEG 頁面,點擊 CREATE NETWORK ENDPOINT GROUP
  2. Network endpoint group type 選擇 Network endpoint group (internet)
  3. Default port 輸入 443 (假如還沒有要設定 SSL 可以先設定 80 port 作為測試)
  4. Add through 選擇 FQDN
  5. FQDN name 填入想要支援的 domain name

二、建立 HTTP(S) Load Balancer & Backend Service

  1. 進入 GCP Console 的 Load Balancing 頁面,點擊 CREATE LOAD BALANCER

  2. 選擇 HTTP(S) Load Balancing 並開始設置
  3. Internet facing 選擇 From Internet to my VMs

  4. Backend configuration
    1. 建立一組 Backend Service

      1. Backend type 選擇 Internet network endpoint group
      2. New backend 選擇剛剛建立的那組 NEG
        1. Protocol 選擇 HTTPS
      3. 選擇啟用 Cloud CDN
      4. 展開 advanced configurations,設定 Custom request headers(如果 origin server 會透過 HTTP Request Host Header 處理請求的話,就必須在 Load Balancer 的 Backend Service 設置 Host Header,讓 origin server 可以辨識並分配請求
        1. Header name 輸入 Host
        2. Header value 輸入 your.domain.name


  5. Frontend configuration
    1. 設定 IP address,port 選擇 443 (假如還沒有要設定 SSL 可以先設定 80 port 作為測試)

    2. 設定 SSL Certificate (Optional)

    3. 上傳憑證、公有金鑰以及私有金鑰

    4. 中間格的憑證鏈結參考以下格式上傳
      —–BEGIN CERTIFICATE—–
      根憑證
      —–END CERTIFICATE—–
      —–BEGIN CERTIFICATE—–
      中繼憑證
      —–END CERTIFICATE—–
  6. Review and finalize
    選擇 Review and finalize 確認設定無誤
  7. 點擊 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。

四、測試

  1. 使用瀏覽器或 curl 連接到 CDN 指定的 domain name 測試請求。為了測試 CDN 是否有 cache 到,需要發送多次請求至該 domain name。
    curl https://loadbalancer.domain.name
  2. 測試請求後,可以在 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

相關文章

主機是別家的可以用 Cloud CDN 嗎? 一招教你客製外部來源!

Google也有CDN – Cloud CDN

如何設定 GCP HTTP(S) 負載平衡器(GCP console 版本)


連絡「GCP 專門家」