對應自訂網域

您可以設定自訂網域,取代 Cloud Run 提供給已部署服務的預設位址。

您可以透過幾種方式為 Cloud Run 服務設定自訂網域:

您可以將多個自訂網域對應至同一個 Cloud Run 服務。

事前準備

除非您已經有要使用的網域,否則請購買新網域。您可以向任何網域名稱註冊商購買網域。

使用全域外部應用程式負載平衡器對應自訂網域

使用這個選項時,您會在 Cloud Run 服務前方新增全域外部應用程式負載平衡器,並在負載平衡器層級設定自訂網域。

使用全域外部應用程式負載平衡器的一項優點,是能大幅控管自訂網域設定。舉例來說,您可以透過這項功能使用自己的 TLS 憑證,或將特定網址路徑導向 Cloud Run 服務。您也可以設定 Cloud CDN 進行快取,並設定 Google Cloud Armor 提升安全性。

您也可以使用網址遮罩,將多個服務對應至單一負載平衡器的自訂網域網址模式中的動態主機名稱或路徑,例如 <service>.example.com

請參閱這篇文章,瞭解如何設定具備 Cloud Run 的全域外部應用程式負載平衡器。

使用 Cloud Run 網域對應功能對應自訂網域 (限量供應且為預先發布版)

Cloud Run 網域對應限制

Cloud Run 網域對應有以下注意事項:

  • Cloud Run 網域對應目前處於預先發布階段。 由於延遲問題,這些功能尚未準備好用於正式環境,因此正式發布時不支援。目前不建議將這個選項用於正式版服務。
  • 將服務對應至自訂網域時,系統會自動核發及續約用於 HTTPS 連線的 Google 代管憑證。
  • 佈建 SSL 憑證通常約需 15 分鐘,但最多可能會耗費 24 小時。
  • 您無法停用 TLS 1.0 和 1.1。如果這是問題所在,您可以使用 Firebase Hosting 或 Cloud Load Balancing,只允許 TLS 1.2 流量。
  • 您無法上傳及使用自己的 (自行管理的) 憑證。
  • Cloud Run 網域對應關係不得超過 64 個字元。
  • 網域對應功能適用於下列區域:
    • asia-east1
    • asia-northeast1
    • asia-southeast1
    • europe-north1
    • europe-west1
    • europe-west4
    • us-central1
    • us-east1
    • us-east4
    • us-west1
  • 如要在其他區域對應自訂網域,請使用其他對應選項。
  • 使用 Cloud Run 網域對應時,您可以將自訂網域對應至服務,然後更新 DNS 記錄。
  • 您可以對應網域 (例如 example.com) 或子網域 (例如 subdomain.example.com)。
  • 您只能將網域對應至 /,無法對應至特定網址路徑,例如 /users
  • 這項功能不支援萬用字元憑證。

將自訂網域對應至服務

您可以使用 Google Cloud 控制台、gcloud CLI 或 Terraform,將自訂網域對應至服務。

控制台

  1. 在 Google Cloud 控制台中開啟網域對應頁面:
    網域對應頁面

  2. 按一下 [新增對應]

    如果顯示視窗太小,畫面不會顯示「新增對應」按鈕,您必須點選頁面角落的三點垂直刪節號圖示。

  3. 從下拉式清單中,選取要對應自訂網域的服務。

  4. 選取「Cloud Run 網域對應」

  5. 在「新增對應」表單中,選取「驗證新網域」

  6. 在「要驗證的基礎網域」欄位中,除非您是向 Google 購買網域,否則必須先驗證網域的擁有權,才能使用該網域。

    如要對應 subdomain.example.comsubdomain1.subdomain2.example.com,必須驗證 example.com 的擁有權。 如要進一步瞭解如何驗證網域擁有權,請參閱 Search Console 說明

  7. 按一下「繼續」

  8. 完成網域驗證後,按一下「繼續驗證並關閉」

  9. 前往網域註冊商網站,使用最後一步顯示的 DNS 記錄更新您的 DNS 記錄 。您隨時都可以顯示記錄,只要在網域對應 [...] 動作選單中按一下「DNS 記錄」即可。

  10. 按一下「完成」

gcloud

  1. 除非您是向 Google 購買自訂網域,否則在 Google Cloud 專案中第一次使用該網域時,必須先驗證網域的擁有權。如要判斷要使用的自訂網域是否已通過驗證,請執行下列指令:

    gcloud domains list-user-verified

    如果您必須驗證網域擁有權,請開啟 Search Console 驗證頁面:

    gcloud domains verify BASE-DOMAIN

    其中 BASE-DOMAIN 是您要驗證的基本網域。舉例來說,如要對應 subdomain.example.com,您必須驗證 example.com 的擁有權。

    Search Console 中完成網域擁有權驗證。詳情請參閱 Search Console 說明

  2. 將您的服務對應至自訂網域:

    • 如要將網域對應至現有服務,請按照下列步驟操作:

      gcloud beta run domain-mappings create --service SERVICE --domain DOMAIN
      • SERVICE 改成您的服務名稱。
      • DOMAIN 改成您的自訂網域,例如 example.comsubdomain.example.com
    • 如要在部署服務時直接對應網域,請按照下列步驟操作:

      gcloud beta run deploy SERVICE --image IMAGE --domain DOMAIN
      • SERVICE 改成您的服務名稱。
      • IMAGE 替換為您的容器映像檔。
      • DOMAIN 替換成自訂網域。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

如要建立 Cloud Run 服務,請在現有的 main.tf 檔案中新增下列項目:

resource "google_cloud_run_v2_service" "default" {
  name     = "custom-domain" # Replace with your service name
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" # Replace with your container image
    }
  }
}

更改項目:

  • custom-domain 改為您的 Cloud Run 服務名稱。
  • us-docker.pkg.dev/cloudrun/container/hello,並參照容器映像檔。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

將 Cloud Run 服務對應至自訂網域:

data "google_project" "project" {}

resource "google_cloud_run_domain_mapping" "default" {
  name     = "verified-domain.com"
  location = google_cloud_run_v2_service.default.location
  metadata {
    namespace = data.google_project.project.project_id
  }
  spec {
    route_name = google_cloud_run_v2_service.default.name
  }
}

verified-domain.com 改成您已驗證的自訂網域,例如 example.comsubdomain.example.com

將 DNS 記錄新增到網域註冊商的系統中

將服務對應至 Cloud Run 中的自訂網域之後,接著必須更新您放在網域註冊商的 DNS 記錄。為方便作業,Cloud Run 會產生並顯示您必須輸入的 DNS 記錄。您必須將這些指向 Cloud Run 服務的記錄新增到網域註冊商那裡,以使對應生效。

如果使用 Cloud DNS 做為 DNS 供應商,請參閱「新增記錄」。

如果您為自訂網域使用憑證授權單位授權 (CAA) DNS 記錄,請授權 pki.googletsencrypt.org,讓 Cloud Run 可以核發及續訂代管型 TLS 憑證。詳情請參閱「指定可核發 Google 管理憑證的 CA」。

  1. 使用下列方式,擷取網域對應的 DNS 記錄資訊:

    控制台

    1. 前往 Cloud Run 網域對應頁面:
      網域對應頁面

    2. 按一下服務右側三點垂直刪節號圖示,然後按一下「DNS 記錄」顯示所有 DNS 記錄:

    選取 DNS 記錄

    gcloud

    gcloud beta run domain-mappings describe --domain [DOMAIN]

    [DOMAIN] 改成您的自訂網域,例如 example.comsubdomain.example.com

    您需要顯示在 resourceRecords 標題底下的所有記錄。

  2. 在網域註冊商服務中登入您的帳戶,然後開啟 DNS 設定頁面。

  3. 前往您網域的設定頁面並找出「主機記錄」部分,然後新增您將網域對應到 Cloud Run 服務時取得的每一筆資源記錄。

  4. 將上述 DNS 記錄全部新增至您在 DNS 供應商的帳戶時:

    • 選取上一步傳回的 DNS 記錄類型:AAAAACNAME
    • 使用名稱 www 對應至 www.example.com
    • 使用名稱 @ 對應 example.com
  5. 儲存您在網域帳戶 DNS 設定頁面上所做的變更。 通常這些變更只要幾分鐘就能生效,不過在某些情況下可能要耗費數小時,時間長短取決於註冊商,以及網域中任何之前 DNS 記錄的存留時間 (TTL)。您可以使用 dig 工具 (例如線上 dig 版本),確認 DNS 記錄已成功更新。

  6. 前往服務的新網址 (例如 https://www.example.com),測試是否成功。核發代管 SSL 憑證可能需要幾分鐘的時間。

將已驗證的網域擁有者新增至其他使用者或服務帳戶

當使用者驗證網域時,系統只會對這個使用者帳戶驗證該網域。也就是說,只有這位使用者可以新增更多使用該網域的網域對應。因此,如要讓其他使用者能新增使用該網域的對應,您必須將其他使用者新增為已驗證的擁有者。

如要將網域的已驗證擁有者新增至其他使用者或服務帳戶,可以透過「Search Console」頁面新增權限:

  1. 在網路瀏覽器中前往下列網址:

    https://search.google.com/search-console/welcome

  2. 在「Properties」(屬性) 底下,按一下要新增使用者或服務帳戶的網域。

  3. 前往「已驗證擁有者」清單,按一下「新增擁有者」,然後輸入 Google 帳戶電子郵件地址或服務帳戶 ID。

    如要查看服務帳戶清單,請在 Google Cloud 控制台中開啟「Service Accounts」(服務帳戶) 頁面:

    前往「Service Accounts」(服務帳戶) 頁面

刪除 Cloud Run 網域對應

您可以使用 Google Cloud 控制台或 gcloud CLI 刪除網域對應。

控制台

  1. 在 Google Cloud 控制台中開啟「網域對應」頁面:
    網域對應頁面

  2. 在「網域對應」頁面中,選取要刪除的網域對應,然後按一下「刪除」

gcloud

  1. 刪除網域對應:

    gcloud beta run domain-mappings delete --domain DOMAIN
    • DOMAIN 改成您的自訂網域,例如 example.comsubdomain.example.com

使用 Firebase 託管對應自訂網域

使用這個選項時,您可以在 Cloud Run 服務前方設定 Firebase 託管,並將網域連結至 Firebase 託管。

使用 Firebase 託管的費用不高,而且您也可以選擇一併託管及提供靜態內容,與 Cloud Run 服務提供的動態內容並存。

如要使用 Firebase 託管對應自訂網域,請按照下列步驟操作:

  1. 將 Firebase 新增至 Google Cloud 專案
  2. 安裝 Firebase CLI
  3. 在與服務原始碼不同的資料夾中,建立包含下列內容的 firebase.json 檔案:

      {
        "hosting": {
          "rewrites": [{
            "source": "**",
            "run": {
              "serviceId": "SERVICE_NAME",
              "region": "REGION"
            }
          }]
        }
      }
    

    SERVICE_NAMEREGION 換成 Cloud Run 服務的名稱和區域。

  4. 部署 Firebase 託管設定:

    firebase deploy --only hosting --project PROJECT_ID
  5. 將自訂網域連結至 Firebase 託管

進一步瞭解 Firebase 託管和 Cloud Run

透過已驗證的服務使用自訂網域

已驗證的服務受到 IAM 保護。 這類 Cloud Run 服務需要用戶端驗證,在產生憑證時聲明要求的預期收件者 (對象)。

目標對象通常是目標服務的完整網址,Cloud Run 服務預設會產生以 run.app 結尾的網址。

不過,如果您使用自訂網域,可以設定自訂目標對象,讓服務接受您的自訂網域做為有效目標對象。

後續步驟