本教程介绍了如何使用证书管理服务部署具有负载均衡器授权的全球 Google 代管证书。
负载平衡器授权是获取 Google 代管证书的最有效方法。它可保持 DNS 配置的简洁性,并在您完成配置后预配 TLS 证书。
以下负载平衡器支持具有负载平衡器授权的 Google 管理的证书:
- 全球外部应用负载均衡器
- 传统应用负载均衡器
- 全局外部代理网络负载均衡器
创建具有负载均衡器授权的 Google 管理的证书
如需创建具有负载均衡器授权的 Google 管理的证书,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,前往 Certificate Manager 页面。 
- 在证书标签页上,点击添加证书。 
- 在证书名称字段中,输入证书的唯一名称。 
- 可选:在说明字段中,输入证书的说明。通过说明,您可以识别证书。 
- 在位置部分,选择全球。 
- 对于范围,选择默认。 
- 在证书类型部分,选择创建 Google 管理的证书。 
- 对于证书授权机构类型,请选择公开。 
- 在域名字段中,指定以英文逗号分隔的证书域名列表。每个域名都必须是完全限定域名,例如 - myorg.example.com。
- 对于授权类型,选择负载平衡器授权。 
- 在标签字段中,指定要与证书关联的标签。如需添加标签,请点击添加标签,并为标签指定键和值。 
- 点击创建。 - 新证书会显示在证书列表中。 
gcloud
如需创建具有负载均衡器授权的由 Google 管理的全局证书,请使用 certificate-manager certificates create 命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES"
替换以下内容:
- CERTIFICATE_NAME:证书的名称。
- DOMAIN_NAMES:以英文逗号分隔的目标网域列表。每个域名都必须是完全限定域名,例如- myorg.example.com。
Terraform
使用 google_certificate_manager_certificate 资源。
如需了解如何应用或移除 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_NAMES:以英文逗号分隔的目标网域列表。每个域名都必须是完全限定域名,例如- myorg.example.com。
将证书部署到负载均衡器
如需部署全球 Google 管理的证书,请使用证书映射。
创建证书映射
创建引用与证书关联的证书映射条目的证书映射:
gcloud
如需创建证书映射,请使用 gcloud certificate-manager maps create 命令:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
将 CERTIFICATE_MAP_NAME 替换为目标证书映射的名称。
Terraform
如需创建证书映射,您可以使用 google_certificate_manager_certificate_map 资源。
创建证书映射条目
创建证书映射条目,并将其与您的证书和证书映射相关联:
gcloud
如需创建证书映射条目,请使用 gcloud certificate-manager maps entries create 命令:
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:您要与证书映射条目相关联的主机名。- 如果您想创建涵盖通配符网域和根网域的证书,请指定包含根网域和通配符的 hostname,例如 - example.com和- *.example.com。此外,您还必须指定两个证书映射条目,一个用于- example.com,另一个用于- *.example.com。
Terraform
如需创建包含根网域的证书映射条目,请使用 google_certificate_manager_certificate_map_entry 资源。
如需创建包含通配符网域的证书映射条目,请使用 google_certificate_manager_certificate_map_entry 资源。
验证证书映射条目是否处于有效状态
在将相应的证书映射关联到目标代理之前,请验证证书映射条目是否处于活跃状态。
如需验证证书映射条目,请使用 gcloud certificate-manager maps entries describe 命令:
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"
替换以下内容:
- CERTIFICATE_MAP_ENTRY_NAME:证书映射条目的名称。
- CERTIFICATE_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
如需将证书映射附加到新的目标代理,请使用 gcloud compute target-https-proxies create 命令:
gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global
替换以下内容:
- PROXY_NAME:目标代理的名称。
- CERTIFICATE_MAP_NAME:引用证书映射条目和关联证书的证书映射的名称。
- URL_MAP:网址映射的名称
如需将证书映射附加到现有目标 HTTPS 代理,请使用 gcloud compute target-https-proxies update 命令。如果您不知道现有目标代理的名称,请前往目标代理页面,并记下目标代理的名称。
gcloud compute target-https-proxies update PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --global
创建或更新目标代理后,运行以下命令进行验证:
gcloud compute target-https-proxies list
Terraform
如需将证书映射附加到目标代理,您可以使用 google_compute_target_https_proxy 资源。
配置目标代理时,如果您直接附加 TLS (SSL) 证书,同时也通过证书映射附加 TLS (SSL) 证书,则代理会使用证书映射引用的证书,并忽略直接附加的 TLS (SSL) 证书。
验证证书的状态
在将证书部署到负载均衡器之前,请验证证书是否处于有效状态。证书状态可能需要几分钟才能变为 ACTIVE。
控制台
- 在 Google Cloud 控制台中,前往 Certificate Manager 页面。 
- 在证书标签页上,查看证书的状态列。 
gcloud
如需验证证书的状态,请运行以下命令:
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
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  - myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'
如果几个小时后证书状态仍不是 ACTIVE,请检查以下事项:
- 引用证书的证书映射已附加到正确的目标代理。
- 目标代理已关联到正确的负载平衡器。
- 目标网域的 DNS 配置指向目标负载平衡器的 IP 地址。
如需了解更多问题排查步骤,请参阅 Certificate Manager 问题排查。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除这些资源。
- 删除负载均衡器及其资源。 - 如需了解详情,请参阅清理负载均衡设置。 
- 从代理中删除或分离证书映射。 - 如需删除证书映射,请运行以下命令: - gcloud compute target-https-proxies delete PROXY_NAME - 如果您想保留目标 HTTPS 代理,请从该代理中分离证书映射。 - 如果任何 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 托管的证书: - 控制台- 在 Google Cloud 控制台中,前往 Certificate Manager 页面。 
- 在证书标签页上,选中相应证书的复选框。 
- 点击删除。 
- 在显示的对话框中,点击删除进行确认。 
 - gcloud- gcloud certificate-manager certificates delete CERTIFICATE_NAME - 将 - CERTIFICATE_NAME替换为目标证书的名称。