本教程以具有 DNS 授权的 Google 管理证书为例,引导您完成证书部署流程。
以下负载平衡器支持具有 DNS 授权的 Google 管理的证书:
- 全球外部应用负载均衡器
- 传统应用负载均衡器
- 跨区域内部应用负载均衡器
- 全球外部代理网络负载均衡器
如要对比受支持的网域授权类型,请参阅网域授权。
如果要将现有证书迁移到 Certificate Manager,请改为按照将证书迁移到 Certificate Manager 中的步骤操作。
目标
本教程介绍如何完成以下任务:
- 使用 Certificate Manager 创建由受大众信任的证书授权机构颁发且具有 DNS 授权的 Google 管理的证书。
- 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。
如需详细了解证书部署流程,请参阅部署概览。
准备工作
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
需要 gcloud CLI 版本
465.0.0
或更高版本才能部署证书。如需查看您的 gcloud CLI 版本,请运行以下命令:gcloud --version
如需更新 gcloud CLI,请运行以下命令。
gcloud components update
请确保您拥有以下角色才能完成本教程中的任务:
- Certificate Manager Owner:创建和管理 Certificate Manager 资源所需的权限。
- Compute Load Balancer Admin 或 Compute Network Admin:创建和管理 HTTPS 目标代理时是必需的。
- DNS 管理员:如果您要将 Cloud DNS 用作 DNS 解决方案,则需要。
详情请参阅以下内容:
- Certificate Manager 的角色和权限
- 适用于 Compute Engine 的 Compute Engine IAM 角色和权限
- 使用 IAM 对 Cloud DNS 进行访问权限控制
创建具有 DNS 授权的 Google 管理的证书
完成本部分中的步骤,以创建 DNS 授权以及引用该 DNS 授权的 Google 管理的证书。
创建 DNS 授权
按照本部分中的说明创建 DNS 授权。如果要为通配符证书(例如 *.myorg.example.com
)创建 DNS 授权,请为父网域(例如 myorg.example.com
)配置 DNS 授权。
gcloud
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
如需使用项目级 DNS 授权(预览版),请运行以下命令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD" gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
请替换以下内容:
AUTHORIZATION_NAME
:DNS 授权的名称。DOMAIN_NAME
:您将为其创建此 DNS 授权的网域的名称。域名必须是完全限定域名,例如myorg.example.com
。
该命令会返回类似于以下内容的输出。使用输出中的 CNAME 记录添加到您的 DNS 配置。
createTime: '2022-01-14T13:35:00.258409106Z' dnsResourceRecord: data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. name: _acme-challenge.myorg.example.com. type: CNAME domain: myorg.example.com name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization updateTime: '2022-01-14T13:35:01.571086137Z'
Terraform
如需创建 DNS 授权,您可以使用 google_certificate_manager_dns_authorization
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将 CNAME 记录添加到您的 DNS 配置
如果您使用 Google Cloud 管理 DNS,请完成本部分中的步骤。否则,请参阅第三方 DNS 解决方案的文档。
在完成本部分中的步骤之前,请确保您已创建公共 DNS 区域。
创建 DNS 授权时,gcloud CLI 命令会返回相应的 CNAME 记录。您必须将此 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置,如下所示:
gcloud
- 启动 DNS 记录事务:
gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
将 DNS_ZONE_NAME
替换为目标 DNS 区域的名称。
- 将 CNAME 记录添加到目标 DNS 区域:
gcloud dns record-sets transaction add CNAME_RECORD \ --name="_acme-challenge.DOMAIN_NAME." \ --ttl="30" \ --type="CNAME" \ --zone="DNS_ZONE_NAME"
请替换以下内容:
CNAME_RECORD
:创建相应 DNS 授权的 Google Cloud CLI 命令返回的 CNAME 记录的完整数据值。DOMAIN_NAME
:目标网域的名称。域名必须是完全限定域名,例如myorg.example.com
。您还必须在目标域名后面添加句点。DNS_ZONE_NAME
:目标 DNS 区域的名称。
请参阅以下示例:
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge.myorg.example.com." \ --ttl="30" \ --type="CNAME" \ --zone="myorg-example-com"
- 运行 DNS 记录事务以保存更改:
gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
将 DNS_ZONE_NAME
替换为目标 DNS 区域的名称。
Terraform
如需将 CNAME 记录添加到您的 DNS 配置,您可以使用 google_dns_record_set
资源。
创建引用 DNS 授权的 Google 管理的证书
如需创建 Google 管理的证书来引用您在前面的步骤中创建的 DNS 授权,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往证书管理器页面。
在显示的页面上,选择证书标签页。
点击添加证书。
输入证书的名称。
该名称在项目中必须是唯一的。
可选:输入证书的说明。该说明有助于您稍后识别特定证书。
对于位置,选择 Global。
对于范围,请选择以下任意选项:
- 默认:为全局外部应用负载平衡器、传统应用负载平衡器或全球外部代理网络负载平衡器选择默认值
- 所有区域:为跨区域内部应用负载平衡器选择所有区域
对于证书类型,选择创建 Google 管理的证书。
对于证书授权机构类型,选择公开。
指定证书的域名。输入以英文逗号分隔的目标网域列表。此外,每个域名都必须是完全限定域名,例如
myorg.example.com
。对于 Authorization type(授权类型),选择 DNS Authorization(DNS 授权)。如果域名具有关联的 DNS 授权,则系统会自动进行选择。如果域名没有关联的 DNS 授权,请执行以下操作:
- 点击 Create missing DNS Authorization(创建缺失的 DNS 授权)以显示“Create DNS Authorization”对话框。
- 在 DNS Authorization Name(DNS 授权名称)字段中,指定 DNS 授权名称。
- 点击创建 DNS 授权。 验证 DNS 名称是否与域名相关联。
指定要与证书关联的标签。如果需要,您可以添加多个标签。如需添加标签,请点击 add_box 添加标签按钮,然后为标签指定
key
和value
。点击创建。验证新证书是否显示在证书列表中。
gcloud
对于全球外部应用负载平衡器、传统应用负载平衡器或全球外部代理网络负载平衡器:
运行以下命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME
请替换以下内容:
CERTIFICATE_NAME
:证书的唯一名称。DOMAIN_NAME
:证书的目标网域。域名必须是完全限定域名,例如myorg.example.com
。AUTHORIZATION_NAME
:您为此证书创建的 DNS 授权的名称。
如需创建具有通配符域名的 Google 管理的证书,请使用以下命令。通配符域名证书涵盖给定网域的所有第一级子网域。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="*.DOMAIN_NAME,DOMAIN_NAME" \ --dns-authorizations=AUTHORIZATION_NAME
请替换以下内容:
CERTIFICATE_NAME
:证书的唯一名称。DOMAIN_NAME
:证书的目标网域。星号点前缀 (*.
) 表示通配符证书。域名必须是完全限定域名,例如myorg.example.com
。AUTHORIZATION_NAME
:您为此证书创建的 DNS 授权的名称。
对于跨区域内部应用负载平衡器:
运行以下命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME
--scope=all-regions
请替换以下内容:
CERTIFICATE_NAME
:证书的唯一名称。DOMAIN_NAME
:证书的目标网域。域名必须是完全限定域名,例如myorg.example.com
。AUTHORIZATION_NAME
:您为此证书创建的 DNS 授权的名称。
如需创建具有通配符域名的 Google 管理的证书,请使用以下命令。通配符域名证书涵盖给定网域的所有第一级子网域。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="*.DOMAIN_NAME,DOMAIN_NAME" \ --dns-authorizations=AUTHORIZATION_NAME \ --scope=all-regions
请替换以下内容:
CERTIFICATE_NAME
:证书的唯一名称。DOMAIN_NAME
:证书的目标网域。星号点前缀 (*.
) 表示通配符证书。域名必须是完全限定域名,例如myorg.example.com
。AUTHORIZATION_NAME
:您为此证书创建的 DNS 授权的名称。
Terraform
验证证书是否处于活跃状态
在将证书部署到负载均衡器之前,请使用以下命令验证证书本身是否处于活跃状态。证书状态最多可能需要几个小时才能更改为 ACTIVE
。
gcloud certificate-manager certificates describe CERTIFICATE_NAME
将 CERTIFICATE_NAME
替换为 Google 管理的目标证书的名称。
该命令会返回类似于以下内容的输出:
expireTime: '2022-05-07T05:03:49Z' managed: authorizationAttemptInfo: - domain: myorg.example.com state: AUTHORIZED dnsAuthorizations: - projects/my-project/locations/global/dnsAuthorizations/myAuth domains: - myorg.example.com state: ACTIVE name: projects/myProject/locations/global/certificates/myCert pemCertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- sanDnsnames: - myorg.example.com updateTime: '2021-10-20T12:19:55.083385630Z'
将证书部署到负载均衡器
本部分介绍将 Google 管理的证书部署到负载均衡器所需的步骤。
在继续执行本部分中的任务之前,请确保您已完成创建具有 DNS 授权的 Google 管理的证书部分中列出的任务。
根据负载均衡器类型,您可以按如下方式部署证书:
- 对于以下负载平衡器,使用证书映射部署证书:
- 全球外部应用负载均衡器
- 全局外部代理网络负载均衡器
- 传统应用负载均衡器
- 对于跨区域内部应用负载平衡器,通过将证书直接附加到目标代理来部署证书。
使用证书映射部署证书
本部分介绍了使用证书映射部署证书的步骤。
创建证书映射
gcloud
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
将 CERTIFICATE_MAP_NAME
替换为目标证书映射的名称。
Terraform
如需创建证书映射,您可以使用 google_certificate_manager_certificate_map
资源。
创建证书映射条目
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
资源。
验证证书映射条目是否处于活跃状态
在将相应的证书映射关联到目标代理之前,请使用以下命令验证证书映射条目是否处于活跃状态:
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'
将证书映射附加到目标代理
将已配置的证书映射附加到目标代理:
gcloud
在 Google Cloud 控制台中,转到目标代理页面。
记下目标代理的名称。
将证书映射附加到目标代理:
gcloud compute target-https-proxies update PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME" \ --global
请替换以下内容:
PROXY_NAME
:目标代理的名称。CERTIFICATE_MAP_NAME
:引用您的证书映射条目和关联证书的证书映射的名称。
Terraform
如需将证书映射附加到目标代理,您可以使用 google_compute_target_https_proxy
资源。
如果存在直接附加到代理的现有 TLS (SSL) 证书,则代理会优先考虑证书映射引用的证书,而非直接附加的 TLS (SSL) 证书。
将证书直接附加到目标代理
如需将证书直接附加到代理,请运行以下命令:
gcloud compute target-https-proxies update PROXY_NAME \ --url-map=URL_MAP \ --global \ --certificate-manager-certificates=CERTIFICATE_NAME
请替换以下内容:
PROXY_NAME
:代理的唯一名称。URL_MAP
:网址映射的名称。您在创建负载均衡器时就创建了网址映射。CERTIFICATE_NAME
:证书的名称。
清理
如需还原您在本教程中所做的更改,请完成以下步骤:
将证书映射与代理分离。
在分离证书映射之前,请注意以下事项:
- 如果有任何 TLS (SSL) 证书直接附加到代理,则分离证书映射会导致代理继续使用这些直接附加的 TLS (SSL) 证书。
- 如果没有直接附加到代理的 TLS (SSL) 证书,则无法将证书映射与代理分离。您必须先将至少一个 TLS (SSL) 证书直接附加到代理,然后才能分离证书映射。
如需分离证书映射,请运行以下命令:
gcloud compute target-https-proxies update PROXY_NAME \ --clear-certificate-map
将
PROXY_NAME
替换为目标代理的名称。从证书映射中删除证书映射条目:
gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
请替换以下内容:
CERTIFICATE_MAP_ENTRY_NAME
:目标证书映射条目的名称。CERTIFICATE_MAP_NAME
:目标证书映射的名称。
删除证书映射:
gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
将
CERTIFICATE_MAP_NAME
替换为目标证书映射的名称。删除 Google 管理的证书:
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME
替换为目标证书的名称。删除 DNS 授权:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
将
AUTHORIZATION_NAME
替换为目标 DNS 授权的名称。