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


本教程以负载均衡器授权为例,介绍如何使用由 Google 管理的证书完成证书部署过程

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

以下负载平衡器支持具有负载平衡器授权的 Google 管理的证书:

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

如果要将现有证书迁移到证书管理器,请改为按照将证书迁移到证书管理器中的步骤操作。

目标

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

  • 使用证书管理器,通过负载均衡器授权创建由受大众信任的 CA 颁发的 Google 管理的证书。
  • 使用目标 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 解决方案,则必须启用 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 管理的证书部署到负载均衡器。

创建证书映射

创建证书映射,以引用与您的证书关联的证书映射条目

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 替换为目标证书的名称。

后续步骤