映射自定义网域

您可以设置自定义网域,而不是 Cloud Run 为已部署服务提供的默认地址。

您可以通过多种方式为 Cloud Run 服务设置自定义网域:

您可以将多个自定义网域映射到同一 Cloud Run 服务。

准备工作

购买新网域,除非您已经有要使用的网域。您可以使用任何域名注册商。

使用全球外部应用负载均衡器映射自定义网域

使用此选项,您可以在 Cloud Run 服务前面添加全球外部应用负载均衡器,并在负载均衡器级层配置自定义网域。

使用全球外部应用负载均衡器的一个优点是,您可以更好地控制自定义网域设置。例如,它允许您使用自己的 TLS 证书或将特定网址路径路由到 Cloud Run 服务。它还允许您配置 Cloud CDN(用于缓存)和 Google Cloud Armor(用于增强安全性)。

您还可以使用网址掩码将多个服务映射到用于单个负载均衡器的自定义网域网址格式(例如 <service>.example.com)中的动态主机名或路径部分。

请参阅有关使用 Cloud Run 设置全球外部应用负载均衡器的文档。

使用 Firebase Hosting 映射自定义网域

使用此选项,您可以在 Cloud Run 服务前面配置 Firebase Hosting,并将网域连接到 Firebase Hosting。

使用 Firebase Hosting 价格较低,并且您可以选择托管和提供静态内容以及由 Cloud Run 服务提供的动态内容。

如需使用 Firebase Hosting 映射自定义网域,请执行以下操作:

  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 Hosting 配置:

    firebase deploy --only hosting --project PROJECT_ID
  5. 将自定义网域连接到 Firebase Hosting

详细了解 Firebase Hosting 和 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 记录,点击网域映射所对应“...”操作菜单中的 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"
  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"
    }
  }
}

name 的值替换为您自己的服务名称。

将 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 记录以显示所有 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. 属性下,点击要为其添加用户或服务账号的网域。

  3. 前往 Verified owners(经验证所有者)列表,点击 Add an owner(添加所有者),然后输入 Google 账号电子邮件地址或服务账号 ID。

    如需查看您的服务账号列表,请打开 Google Cloud 控制台中的“服务账号”页面:

    转到“服务账号”页面

删除 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 结尾的网址。但是,如果您使用自定义网域,则必须避免使用自动生成的 run.app 网址作为受众群体。而是为自定义受众群体配置服务,以使其接受自定义网域作为有效的身份验证受众群体。

后续步骤

  • 如需通过将全球外部应用负载均衡器与 Terraform 搭配使用来为 Cloud Run 设置自定义网域,请浏览示例代码