部署具有负载均衡器授权的全球 Google 管理的证书


本教程将引导您完成将 Google 管理的证书与负载均衡器结合使用的证书部署过程 “授权”作为示例。

如需比较支持的网域授权类型,请参阅网域授权

以下负载平衡器支持带有负载的 Google 管理的证书 进行负载均衡:

  • 全球外部应用负载均衡器
  • 传统应用负载均衡器
  • 全局外部代理网络负载均衡器

如果您想要将现有证书迁移到证书管理器,请执行以下操作: 按照将证书迁移到 Certificate Manager

目标

本教程介绍如何完成以下任务:

  • 使用 使用 Certificate Manager 对负载均衡器进行授权。
  • 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。

如需详细了解证书部署过程,请参阅部署 概览

如果您按照本教程中的步骤为已在处理生产流量的网域部署证书,请注意,在相应负载均衡器上预配和激活证书期间,该网域的流量将中断。

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 请确保您拥有以下角色,以便完成本教程中的任务:

    • Certificate Manager Owner:必须拥有此角色才能创建和管理 Certificate Manager 资源。
    • Compute Load Balancer AdminCompute Network Admin:必须拥有此角色才能创建和管理 HTTPS 目标代理。
    • DNS Administrator:如果您要将 Cloud DNS 用作您的 DNS 解决方案。

    详情请参阅以下内容:

创建具有负载均衡器授权的 Google 管理的证书

如需创建具有负载均衡器授权的 Google 管理的证书,请完成本部分中的步骤。

如需为证书指定多个域名,请为证书提供以英文逗号分隔的目标域名列表。

如需了解详情,请参阅权限和角色

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往“证书管理器”

  2. 在显示的页面上,选择证书标签页。

  3. 点击添加证书

  4. 输入证书的名称

    该名称在项目中必须是唯一的。

  5. 可选:输入证书的说明。说明 可帮助您稍后识别特定证书。

  6. 对于位置,选择全局

  7. 对于范围,选择默认

  8. 对于证书类型,选择创建 Google 管理的证书

  9. 对于证书授权机构类型,请选择公共

  10. 指定证书的域名。输入以逗号分隔的目标网域列表。此外,每个域名都必须是完全限定域名,例如 myorg.example.com

  11. 对于授权类型,选择负载平衡器授权

  12. 指定要与证书关联的标签。您可以添加 多个标签(如果需要)。如需添加标签,请点击 添加标签按钮,并为标签指定 keyvalue

  13. 点击创建。验证新证书是否显示在证书列表中。

gcloud

gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAMES"

替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAMES:以英文逗号分隔的目标列表 网域。每个域名都必须是完全限定域名,例如 myorg.example.com

Terraform

使用 google_certificate_manager_certificate 资源

resource "google_certificate_manager_certificate" "default" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "Cert with LB authorization"
  managed {
    domains = [local.domain]
  }
  labels = {
    "terraform" : true
  }
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

API

certificates.create 方法发出 POST 请求,以创建证书,如下所示:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
 }
}

替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • CERTIFICATE_NAME:用于描述此证书的唯一名称。
  • DOMAIN_NAME:此证书的目标网域。域名必须是完全限定域名,例如 myorg.example.com

有关证书部署流程的概述,请参阅部署 概览

将证书部署到负载均衡器

完成本部分中的步骤,将您在上一部分中创建的 Google 管理的证书部署到负载均衡器。

创建证书映射

创建一个证书映射, 引用证书映射 与您的 Ad Exchange 条目关联的条目 证书

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME 替换为目标的名称 证书映射。

Terraform

使用 google_certificate_manager_certificate_map 资源

resource "google_certificate_manager_certificate_map" "default" {
  name        = "${local.name}-certmap1-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

创建证书映射条目

创建证书映射条目,并将其与证书证书映射相关联。

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME: 证书映射条目
  • CERTIFICATE_MAP_NAME:此证书映射条目关联到的证书映射的名称
  • CERTIFICATE_NAME:您要创建的证书的名称 希望与此证书映射条目相关联
  • HOSTNAME:您要与此证书映射条目关联的主机名

Terraform

使用 google_certificate_manager_certificate_map_entry 资源

resource "google_certificate_manager_certificate_map_entry" "default" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.default.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.default.id]
  hostname     = local.domain
}

验证证书映射条目是否处于活跃状态

在将相应的证书映射关联到目标代理之前,请使用以下命令验证证书映射条目是否处于活跃状态:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME:目标的名称 证书映射条目
  • CERTIFICATE_MAP_NAME:此证书映射条目关联到的证书映射的名称

该命令会返回类似于以下内容的输出:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

将证书映射附加到目标代理

将已配置的证书映射附加到目标代理。

控制台

  1. 在 Google Cloud 控制台中,转到目标代理页面。

打开“目标代理”

  1. 请记下目标代理的名称。

  2. 将证书映射附加到目标代理:

   gcloud compute target-https-proxies update PROXY_NAME \
       --certificate-map="CERTIFICATE_MAP_NAME"
   

替换以下内容:

*   `PROXY_NAME`: the name of the target proxy
*   `CERTIFICATE_MAP_NAME`: the name of the certificate
    map referencing your certificate map entry and its associated
    certificate

Terraform

使用 google_compute_target_https_proxy 资源

resource "google_compute_target_https_proxy" "default" {
  name            = "test-proxy"
  certificate_map = "//certificatemanager.googleapis.com/${google_certificate_manager_certificate_map.default.id}"
  url_map         = google_compute_url_map.default.id
}

如果有任何现有的 TLS (SSL) 证书直接附加到代理, 代理会优先考虑证书映射引用的证书 通过直接附加的 TLS (SSL) 证书进行验证。

等待证书激活

将证书附加到目标代理后,证书最长可能需要几个小时才能签发,并且其状态会变为 ACTIVE。状态变为 ACTIVE 后,负载均衡器最多可能需要 30 分钟才能开始使用证书。

使用以下命令检查证书的状态:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

CERTIFICATE_NAME 替换为目标 Google 管理的证书的名称。

该命令会返回类似于以下内容的输出:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  domains:
  -   myorg.example.com
    state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
sanDnsnames:
  -   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

如果证书状态在几个小时后仍未更改为 ACTIVE,请检查以下事项:

如需了解更多问题排查步骤,请参阅排查 SSL 证书问题

清理

如需还原您在本教程中所做的更改,请完成以下操作 步骤:

  1. 从代理中分离证书映射。

    在分离证书映射之前,请注意以下事项:

    • 如果有任何 TLS (SSL) 证书直接附加到代理,则解除证书映射会导致代理恢复使用这些直接附加的 TLS (SSL) 证书。
    • 如果没有直接附加到代理的 TLS (SSL) 证书, 证书映射无法与代理分离。您必须先将 将至少一个 TLS (SSL) 证书直接发送到代理,然后才能 分离证书映射。

    如需分离证书映射,请运行以下命令:

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    
  2. 从证书映射中删除证书映射条目:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
      --map="CERTIFICATE_MAP_NAME"
    

    替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:目标的名称 证书映射条目
    • CERTIFICATE_MAP_NAME:目标证书映射的名称
  3. 删除证书映射:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME 替换为目标证书映射的名称。

  4. 删除 Google 托管的证书:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME 替换为目标的名称 证书。

后续步骤