本教程介绍如何使用 Certificate Manager 将具有 DNS 授权的 Google 管理的全球证书部署到 跨区域内部应用负载平衡器。
如果您想部署到全球外部负载平衡器或区域级负载平衡器,请参阅以下内容:
目标
本教程介绍如何完成以下任务:
- 使用 Certificate Manager 创建由公开受信任的证书授权机构颁发的具有 DNS 授权的 Google 管理的证书。
- 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户,请 创建一个账号,以便在 真实场景中评估我们产品的性能。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init - 创建公共 DNS 区域
所需的角色
请确保您拥有以下角色,以便完成本教程中的任务:
Certificate Manager Owner (
roles/certificatemanager.owner)创建和管理 Certificate Manager 资源时需要此角色。
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin) 或 Compute Network Admin (roles/compute.networkAdmin)创建和管理 HTTPS 目标代理时需要此角色。
DNS Administrator (
roles/dns.admin)如果您想使用 Cloud DNS 作为 DNS 解决方案,则需要此角色。
详情请参阅以下内容:
域名
如需创建证书,请获取您拥有的网域的完全限定域名 (FQDN)。如果您没有网域,可以使用 Cloud Domains 来注册网域。
创建负载均衡器
本教程假定您已创建并配置负载平衡器的后端、健康检查、后端服务和网址映射。请记下网址映射的名称,因为您在本教程后面需要用到它。
如果您尚未创建跨区域内部应用负载平衡器,请参阅设置具有虚拟机实例组 后端的 跨区域内部应用负载平衡器。
创建具有 DNS 授权的 Google 管理的证书
在创建证书之前,请先创建公共 DNS 区域。然后,创建 DNS 授权并将 CNAME 记录添加到目标 DNS 区域。
创建 DNS 授权
DNS 授权仅涵盖单个域名。您必须为要与目标证书搭配使用的每个域名创建单独的 DNS 授权。
如果您要为通配符证书(例如 *.myorg.example.com)创建
DNS 授权,请为父网域(例如
myorg.example.com)配置 DNS 授权。
控制台
您可以在创建证书时创建 DNS 授权或附加现有 DNS 授权。如需了解详情,请参阅 创建引用 DNS 授权的 Google 管理的证书。
gcloud
您可以创建两种类型的 DNS 授权:FIXED_RECORD 或 PER_PROJECT_RECORD。如需了解详情,请参阅 DNS 授权。
FIXED_RECORD DNS 授权
如需创建 FIXED_RECORD DNS 授权,请使用以下 gcloud certificate-manager dns-authorizations create 命令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
--domain="DOMAIN_NAME" \
--type=[FIXED_RECORD]
替换以下内容:
AUTHORIZATION_NAME:DNS 授权的名称。DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如myorg.example.com。
创建 FIXED_RECORD DNS 授权后,请使用
gcloud certificate-manager dns-authorizations describe 命令对其进行验证:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
输出类似于以下内容。在输出中,找到 dnsResourceRecord 部分。找到 CNAME 记录,并将该记录的
详细信息(data、name 和 type)添加到您的 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'
PER_PROJECT_RECORD DNS 授权
如需创建 PER_PROJECT_RECORD DNS 授权,请使用以下
gcloud certificate-manager dns-authorizations create 命令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
--domain="DOMAIN_NAME" \
--type=PER_PROJECT_RECORD
替换以下内容:
AUTHORIZATION_NAME:DNS 授权的名称。DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如myorg.example.com。
创建 PER_PROJECT_RECORD DNS 授权后,请使用
gcloud certificate-manager dns-authorizations describe 命令对其进行验证:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
输出类似于以下内容。在输出中,找到 dnsResourceRecord 部分。找到 CNAME 记录,并将该记录的
详细信息(data、name 和 type)添加到您的 DNS 配置。
createTime: '2022-01-14T13:35:00.258409106Z' dnsResourceRecord: data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. name: _acme-challenge_ujmmovf2vn55tgye.myorg.example.com type: CNAME domain: myorg.example.com name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization updateTime: '2022-01-14T13:35:01.571086137Z'
API
如需创建 DNS 授权,请向 dnsAuthorizations.create 方法发出 POST 请求:
POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME
{
"domain": "DOMAIN_NAME",
"type": "PER_PROJECT_RECORD" //optional
}
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目的 ID。AUTHORIZATION_NAME:DNS 授权的名称。DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。 域名必须是完全限定域名,例如myorg.example.com。
创建引用 DNS 授权的 Google 管理的证书
如需创建引用您在先前步骤中创建的 DNS 授权的 Google 管理的证书,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在证书 标签页上,点击添加证书 。
在证书名称 字段中,输入证书的唯一名称。
可选:在说明 字段中,输入证书的说明。借助说明,您可以识别证书。
在位置 部分,选择全球 。
在范围 部分,选择所有区域 。
在证书类型 部分,选择创建 Google 管理的证书 。
在证书授权机构类型 部分,选择公开 。
在域名 字段中,指定证书的域名列表(以英文逗号分隔)。每个域名都必须是完全限定域名,例如
myorg.example.com。域名也可以是通配符域名,例如*.example.com。在授权类型 部分,选择 DNS 授权 。
该页面列出了域名的 DNS 授权。如果域名没有关联的 DNS 授权,请按照以下步骤创建一个:
- 点击创建缺失的 DNS 授权 。
- 在 DNS 授权名称 字段中,指定
DNS 授权的名称。
默认 DNS 授权类型为
FIXED_RECORD。如需跨多个项目独立管理证书,请选中按项目授权 复选框。 - 点击创建 DNS 授权 。
在标签 字段中,指定要与证书关联的标签。如需添加标签,请点击 添加标签,然后为标签指定 键和值。
点击创建 。
新证书会显示在证书列表中。
gcloud
如需创建具有 DNS 授权的 Google 管理的跨区域证书,
请使用带有
dns-authorizations 和 --scope 标志的 certificate-manager certificates create 命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAME, *.DOMAIN_NAME" \
--dns-authorizations="AUTHORIZATION_NAMES" \
--scope=all-regions
替换以下内容:
CERTIFICATE_NAME:证书的名称。DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名(例如myorg.example.com)或通配符网域(例如*.myorg.example.com)。星号英文句点前缀 (*.) 表示通配符证书。AUTHORIZATION_NAMES:DNS 授权名称的逗号分隔列表。
API
如需创建证书,请向 certificates.create 方法发出 POST 请求,如下所示:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
"managed": {
"domains": ["DOMAIN_NAME"],
"dnsAuthorizations": [
"projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
],
"scope": "ALL_REGIONS"
}
}
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目的 ID。CERTIFICATE_NAME:证书的名称。DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名(例如myorg.example.com)或通配符网域(例如*.myorg.example.com)。星号英文句点前缀 (*.) 表示通配符证书。AUTHORIZATION_NAMES:DNS 授权名称的逗号分隔列表。
将 CNAME 记录添加到您的 DNS 配置
如果您使用第三方 DNS 解决方案来管理 DNS,请参阅其文档,将 CNAME 记录添加到 DNS 配置。如果您使用 Google Cloud 来管理 DNS,请完成本部分中的步骤。
控制台
要创建记录集,请按以下步骤操作:
在 Google Cloud 控制台中,前往 DNS 区域 页面。
点击要添加记录的 DNS 区域的名称。
在区域详情 页面上,点击添加标准 。
在创建记录集 页面的 DNS 名称 字段中,输入 DNS 区域的子网域。
输入子网域名称时,请确保子网域名称(包括 DNS 名称 字段中显示的灰色文本)与
dnsResourceRecord.name字段的完整值一致,该字段显示在 命令的gcloud certificate-manager dns-authorizations describe输出中。请参见以下示例:
如果
dnsResourceRecord.name字段值为_acme-challenge.myorg.example.com.,并且 DNS 名称字段中的灰色文本为.example.com.,则输入_acme-challenge.myorg。如果
dnsResourceRecord.name字段值为_acme-challenge.myorg.example.com.,并且 DNS 名称 字段中的灰色文本为.myorg.example.com.,则输入_acme-challenge。如果
dnsResourceRecord.name字段的值为_acme-challenge_ujmmovf2vn55tgye.myorg.example.com.,并且 DNS 名称 字段中的灰色文本为.myorg.example.com.,则输入_acme-challenge_ujmmovf2vn55tgye。
在资源记录类型 字段中,选择 CNAME 。
在 TTL 字段中,输入一个正数值表示资源记录的生存时间,即该资源记录可缓存的时间期限。
从 TTL 单位 列表中,选择时间单位,例如
30 minutes。在规范名称 字段中,输入
dnsResourceRecord.data字段的完整值,该值显示在gcloud certificate-manager dns-authorizations describe命令的输出中。要输入其他信息,请点击添加一项 。
点击创建。
gcloud
创建 DNS 授权后,gcloud CLI 命令会返回相应的 CNAME 记录。如需将 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置,请按照以下步骤操作:
发起 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="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \ --ttl="30" \ --type="CNAME" \ --zone="DNS_ZONE_NAME"替换以下内容:
CNAME_RECORD:用于创建相应 DNS 授权的 Google Cloud CLI 命令所返回的 CNAME 记录的完整数据值。VALIDATION_SUBDOMAIN_NAME:DNS 区域的前缀子网域,例如_acme-challenge。您可以按照创建 DNS 授权中的说明,从gcloud certificate-manager dns-authorizations describe命令日志中复制名称 。DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如myorg.example.com。您还必须在目标域名后添加尾随英文句点。DNS_ZONE_NAME:目标 DNS 区域的名称。
如需详细了解
FIXED_RECORD和PER_PROJECT_RECORDDNS 授权之间的区别,请参阅以下示例。这两个示例之间的唯一区别是--name标志的值。FIXED_RECORD 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"PER_PROJECT_RECORD DNS 授权
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge_ujmmovf2vn55tgye.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 资源。
验证证书的状态
在将证书部署到负载均衡器之前,请验证证书是否处于活跃状态。证书状态可能需要几分钟才能更改为 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
dnsAuthorizations:
- projects/myProject/locations/global/dnsAuthorizations/myCert
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,请检查您是否已将 CNAME 记录正确添加到 DNS 配置。
如需了解更多问题排查步骤,请参阅排查 Certificate Manager 问题。
将证书部署到负载均衡器
如需部署 Google 管理的全球证书,请将其直接附加到目标代理。
将证书直接附加到目标代理
您可以将证书附加到新的目标代理或现有目标代理。
如需将证书附加到新的目标代理,请使用 gcloud compute
target-https-proxies create
命令:
gcloud compute target-https-proxies create PROXY_NAME \
--url-map=URL_MAP \
--certificate-manager-certificates=CERTIFICATE_NAME \
--global
替换以下内容:
PROXY_NAME:目标代理的名称。URL_MAP:网址映射的名称。您在创建负载均衡器时创建了网址映射。CERTIFICATE_NAME:证书的名称。
如需将证书附加到现有目标 HTTPS 代理,请使用 gcloud
compute target-https-proxies update
command。如果您
不知道现有目标代理的名称,请前往**目标代理**
页面,并记下目标代理的名称。
gcloud compute target-https-proxies update PROXY_NAME \
--global \
--certificate-manager-certificates=CERTIFICATE_NAME
创建或更新目标代理后,请运行以下命令对其进行验证:
gcloud compute target-https-proxies list
清理
为避免因本教程中使用的资源 而产生费用,请删除这些资源。 Google Cloud
删除负载均衡器及其资源。
请参阅清理负载均衡设置。
删除 Google 管理的证书:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在证书 标签页上,选中证书的复选框。
点击删除 。
在显示的对话框中,点击删除 进行确认。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME替换为目标证书的名称。删除 DNS 授权:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
将
AUTHORIZATION_NAME替换为目标 DNS 授权的名称。