對應自訂網域

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

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

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

事前準備

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

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

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

使用全域外部應用程式負載平衡器的好處之一,就是可以讓您在自訂網域設定方面享有更多控制權。舉例來說,您可以使用自己的 TLS 憑證,或將特定網址路徑重新導向至 Cloud Run 服務。您也可以設定 Cloud CDN 進行快取,以及 Google Cloud Armor 提供額外安全防護。

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

請參閱使用 Cloud Run 設定全域外部應用程式負載平衡器的說明文件。

使用 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

使用 Cloud Run 網域對應功能對應自訂網域 (僅限部分地區提供,且為預先發布版)

Cloud Run 網域對應限制

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

  • Cloud Run 網域對應功能目前處於預先發布版推出階段。由於延遲問題,這些功能尚未準備好投入實際作業,且在正式發布階段不受支援。目前不建議將這個選項用於正式服務。
  • 當您將服務對應至自訂網域時,系統會自動發出及續訂用於 HTTPS 連線的 Google 代管憑證。
  • 佈建安全資料傳輸層 (SSL) 憑證通常需要約 15 分鐘,但最多可能需要 24 小時。
  • 您無法停用 TLS 1.0 和 1.1。如果這是問題所在,您可以使用 Firebase 代管服務或 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. 按一下 [新增對應]

    如果顯示視窗太小,系統不會顯示「Add Mapping」按鈕,您必須點選頁面角落的三點垂直刪節號圖示。

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

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

  5. 在「Add mapping」表單中,選取「Verify a new domain」

  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

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 供應商,請參閱「新增記錄」。

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

    控制台

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

    2. 按一下服務右側的三點垂直刪節號圖示,然後按一下「DNS RECORDS」顯示所有的 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

使用自訂網域搭配已驗證的服務

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

目標對象通常是目標服務的完整網址,Cloud Run 服務的預設網址結尾為 run.app。不過,如果您使用自訂網域,可以設定自訂目標對象,讓服務將您的自訂網域視為有效目標對象。

後續步驟

  • 如要使用全球外部應用程式負載平衡器搭配 Terraform 為 Cloud Run 設定自訂網域,請參閱程式碼範例