本教程介绍了如何使用 Certificate Manager 将具有 DNS 授权的全球 Google 管理的证书部署到跨区域内部应用负载平衡器。
如果您想部署到全球外部负载平衡器或区域负载平衡器,请参阅以下内容:
目标
本教程介绍如何完成以下任务:
- 使用 Certificate Manager 创建由具有 DNS 授权的公认证书授权机构颁发的 Google 管理的证书。
- 使用目标 HTTPS 代理将证书部署到受支持的负载平衡器。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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 解决方案,则必须提供。
详情请参阅以下内容:
- 证书管理器的角色和权限。
- Compute Engine 的 Compute Engine IAM 角色和权限。
- Cloud 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 授权,请使用 certificate-manager
dns-authorizations create
命令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME"
替换以下内容:
AUTHORIZATION_NAME
:DNS 授权的名称。DOMAIN_NAME
:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如myorg.example.com
。
Google 管理的全球证书使用 FIXED_RECORD
作为默认 DNS 授权类型。如需使用 PER_PROJECT_RECORD
DNS 授权,请运行以下命令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD"
创建 DNS 授权后,请使用 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'
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 控制台中,前往证书管理器页面。
在证书标签页上,点击添加证书。
在证书名称字段中,为证书输入一个唯一名称。
可选:在说明字段中,输入证书的说明。您可以通过说明来识别证书。
在位置部分,选择全球。
对于范围,选择所有区域。
在证书类型部分,选择创建 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 名称字段中显示的灰显文本)与
gcloud certificate-manager dns-authorizations describe
命令的输出中显示的dnsResourceRecord.name
字段的完整值相匹配。请参见以下示例:
如果
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
。您可以从gcloud certificate-manager dns-authorizations describe
命令日志中复制该名称,如创建 DNS 授权中所述。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
资源。
验证证书状态
在将证书部署到负载平衡器之前,请验证证书是否处于有效状态。证书状态可能需要几分钟才能更改为 ACTIVE
。
控制台
在 Google Cloud 控制台中,前往证书管理器页面。
在证书标签页中,查看证书的状态列。
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
命令。如果您不知道现有目标代理的名称,请前往目标代理页面,并记下目标代理的名称。
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 控制台中,前往证书管理器页面。
在证书标签页上,选中相应证书的复选框。
点击删除。
在显示的对话框中,点击删除进行确认。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME
替换为目标证书的名称。删除 DNS 授权:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
将
AUTHORIZATION_NAME
替换为目标 DNS 授权的名称。