将负载平衡器证书迁移到证书管理器

本教程介绍了如何将 Cloud Load Balancing 证书迁移到 Certificate Manager。如需详细了解 Cloud Load Balancing 证书,请参阅 Cloud Load Balancing 文档中的 SSL 证书概览

如需迁移 Cloud Load Balancing 证书且不发生停机,请先确定要迁移的证书。然后,创建与 Cloud Load Balancing 证书数量相同的 Google 管理型证书。接下来,将证书整合到单个证书映射中,并在另一个负载均衡器中测试该证书映射。如果测试成功,请将证书映射附加到托管 Cloud Load Balancing 证书的目标负载均衡器。

如需查看受支持的负载平衡器列表,请参阅 Certificate Manager 概览

确定要迁移的证书

如需确定要迁移的证书,请按以下步骤操作:

  1. 在负载均衡器上,确定目标代理的名称。

  2. 确定要迁移的证书。

    如需查找附加到目标代理的证书,请运行以下命令:

    gcloud compute target-https-proxies describe TARGET_PROXY_NAME
    

    TARGET_PROXY_NAME 替换为目标代理的名称。

    输出类似于以下内容:

    creationTimestamp: '2021-10-06T04:05:07.520-07:00'
    fingerprint: c9Txdx6AfcM=
    id: '365692570234384780'
    kind: compute#targetHttpsProxy
    name: my-proxy
    selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/targetHttpsProxies/my-proxy
    sslCertificates:
    - https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-first-certificate
    - https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-second-certificate
    urlMap: https://www.googleapis.com/compute/v1/projects/my-project/global/urlMaps/my-map
    

    请注意 sslCertificates 字段中列出的证书名称。如需了解详情,请参阅目标代理概览

  3. 获取每项证书的详细信息

    gcloud compute ssl-certificates --project=PROJECT_ID describe LB_CERTIFICATE_NAME
    

    替换以下内容:

    • PROJECT_ID: Google Cloud 项目的 ID。
    • LB_CERTIFICATE_NAME:负载均衡器证书的名称。

    输出类似于以下内容:

       certificate: |
         -----BEGIN CERTIFICATE-----
         MIIFYjCCBEqgAwIBAgIQd70NbNs2+RrqIQ/E8FjTDTANBgkqhkiG9w0BAQsFADBX
         MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE
         CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIwMDYx
         OTAwMDA0MloXDTI4MDEyODAwMDA0MlowRzELMAkGA1UEBhMCVVMxIjAgBgNVBAoT
         GUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBMTEMxFDASBgNVBAMTC0dUUyBSb290IFIx
         MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAthECix7joXebO9y/lD63
         ladAPKH9gvl9MgaCcfb2jH/76Nu8ai6Xl6OMS/kr9rH5zoQdsfnFl97vufKj6bwS
         iV6nqlKr+CMny6SxnGPb15l+8Ape62im9MZaRw1NEDPjTrETo8gYbEvs/AmQ351k
         KSUjB6G00j0uYODP0gmHu81I8E3CwnqIiru6z1kZ1q+PsAewnjHxgsHA3y6mbWwZ
         DrXYfiYaRQM9sHmklCitD38m5agI/pboPGiUU+6DOogrFZYJsuB6jC511pzrp1Zk
         j5ZPaK49l8KEj8C8QMALXL32h7M1bKwYUH+E4EzNktMg6TO8UpmvMrUpsyUqtEj5
         cuHKZPfmghCN6J3Cioj6OGaK/GP5Afl4/Xtcd/p2h/rs37EOeZVXtL0m79YB0esW
         CruOC7XFxYpVq9Os6pFLKcwZpDIlTirxZUTQAs6qzkm06p98g7BAe+dDq6dso499
         iYH6TKX/1Y7DzkvgtdizjkXPdsDtQCv9Uw+wp9U7DbGKogPeMa3Md+pvez7W35Ei
         Eua++tgy/BBjFFFy3l3WFpO9KWgz7zpm7AeKJt8T11dleCfeXkkUAKIAf5qoIbap
         sZWwpbkNFhHax2xIPEDgfg1azVY80ZcFuctL7TlLnMQ/0lUTbiSw1nH69MG6zO0b
         9f6BQdgAmD06yK56mDcYBZUCAwEAAaOCATgwggE0MA4GA1UdDwEB/wQEAwIBhjAP
         BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTkrysmcRorSCeFL1JmLO/wiRNxPjAf
         BgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo//z9SzBgBggrBgEFBQcBAQRUMFIw
         JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnBraS5nb29nL2dzcjEwKQYIKwYBBQUH
         MAKGHWh0dHA6Ly9wa2kuZ29vZy9nc3IxL2dzcjEuY3J0MDIGA1UdHwQrMCkwJ6Al
         oCOGIWh0dHA6Ly9jcmwucGtpLmdvb2cvZ3NyMS9nc3IxLmNybDA7BgNVHSAENDAy
         MAgGBmeBDAECATAIBgZngQwBAgIwDQYLKwYBBAHWeQIFAwIwDQYLKwYBBAHWeQIF
         AwMwDQYJKoZIhvcNAQELBQADggEBADSkHrEoo9C0dhemMXoh6dFSPsjbdBZBiLg9
         NR3t5P+T4Vxfq7vqfM/b5A3Ri1fyJm9bvhdGaJQ3b2t6yMAYN/olUazsaL+yyEn9
         WprKASOshIArAoyZl+tJaox118fessmXn1hIVw41oeQa1v1vg4Fv74zPl6/AhSrw
         9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy
         +qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi
         d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8=
         -----END CERTIFICATE-----
       creationTimestamp: '2021-05-06T04:39:21.736-07:00'
       expireTime: '2022-06-07T01:10:34.000-07:00'
       id: '6422259403966690822'
       kind: compute#sslCertificate
       managed:
          domainStatus:
          a.my-domain1.example.com: ACTIVE
          b.my-domain2.example.com: ACTIVE
          domains:
          - a.my-domain1.example.com
          - b.my-domain2.example.com
          status: ACTIVE
       name: my-certificate
       selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/sslCertificates/my-certificate
       subjectAlternativeNames:
       - a. my-domain1.example.com
       - b. my-domain2.example.com
       type: MANAGED
    

创建 Google 管理的证书

创建与负载均衡器证书数量相同的 Google 管理的证书。对于全球级或经典版负载均衡器,请创建全球级证书;对于区域级负载均衡器,请创建区域级证书;对于跨区域负载均衡器,请创建跨区域证书。在创建证书之前,请先创建 DNS 授权,然后将 CNAME 记录添加到您网域的权威 DNS 区域。

您可以选择创建具有 DNS 授权的 Google 管理的证书(推荐)或自行管理的证书

本部分列出了创建全局 Google 管理型证书的步骤和命令。如需创建 Google 管理的区域级证书或跨区域证书,请参阅创建 Google 管理的证书

创建 DNS 授权

DNS 授权仅涵盖单个域名。您必须为要用于目标证书的每个域名单独创建 DNS 授权。

如果您要为通配符证书(例如 *.myorg.example.com)创建 DNS 授权,请为父网域(例如 myorg.example.com)配置 DNS 授权。

控制台

您可以在创建证书时创建 DNS 授权或附加现有 DNS 授权。如需了解详情,请参阅创建引用 DNS 授权的 Google 管理的证书

gcloud

您可以创建两种类型的 DNS 授权:FIXED_RECORDPER_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 记录,并将该记录的详细信息(datanametype)添加到您的 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 记录,并将该记录的详细信息(datanametype)添加到您的 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'

Terraform

如需创建 DNS 授权,您可以使用 google_certificate_manager_dns_authorization 资源

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

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 管理的证书,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往 Certificate Manager

  2. 证书标签页上,点击添加证书

  3. 证书名称字段中,输入证书的唯一名称。

  4. 可选:在说明字段中,输入证书的说明。通过说明,您可以识别证书。

  5. 位置部分,选择全球

  6. 对于范围,选择默认

  7. 证书类型部分,选择创建 Google 管理的证书

  8. 对于证书授权机构类型,请选择公开

  9. 域名字段中,指定以英文逗号分隔的证书域名列表。每个域名都必须是完全限定域名,例如 myorg.example.com。域名也可以是通配符域名,例如 *.example.com

  10. 对于授权类型,请选择 DNS 授权

    该页面会列出网域名的 DNS 授权。如果某个域名没有关联的 DNS 授权,请按以下步骤创建:

    1. 点击创建缺少的 DNS 授权
    2. DNS 授权名称字段中,指定 DNS 授权的名称。 默认 DNS 授权类型为 FIXED_RECORD。如需在多个项目中独立管理证书,请选中按项目授权复选框。
    3. 点击创建 DNS 授权
  11. 标签字段中,指定要与证书关联的标签。如需添加标签,请点击添加标签,并为标签指定键和值。

  12. 点击创建

    新证书会显示在证书列表中。

gcloud

如需创建具有 DNS 授权的 Google 管理的全球证书,请运行带有 dns-authorizations 标志的 certificate-manager certificates create 命令

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME,*.DOMAIN_NAME" \
    --dns-authorizations="AUTHORIZATION_NAMES"

替换以下内容:

  • CERTIFICATE_NAME:证书的名称。
  • DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com,或通配符域名,例如 *.myorg.example.com。星号点前缀 (*.) 表示通配符证书。
  • AUTHORIZATION_NAMES:您为证书创建的 DNS 授权的名称列表(以英文逗号分隔)。

Terraform

使用 google_certificate_manager_certificate 资源

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

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",
  ],
 }
}

替换以下内容:

  • 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,请完成本部分中的步骤。

控制台

要创建记录集,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 DNS 区域页面。

    转到 Cloud DNS 可用区

  2. 点击要添加记录的 DNS 区域的名称。

  3. 区域详情页面上,点击添加标准

  4. 创建记录集页面的 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

  5. 资源记录类型字段中,选择 CNAME

  6. TTL 字段中,输入一个正数值表示资源记录的生存时间,即该资源记录可缓存的时间期限。

  7. TTL 单位列表中,选择时间单位,例如 30 minutes

  8. 规范名称字段中,输入 dnsResourceRecord.data 字段的完整值,如 gcloud certificate-manager dns-authorizations describe 命令的输出中所示。

  9. 要输入其他信息,请点击添加一项

  10. 点击创建

gcloud

创建 DNS 授权后,gcloud CLI 命令会返回相应的 CNAME 记录。如需将 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置,请按以下步骤操作:

  1. 发起 DNS 记录事务:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    DNS_ZONE_NAME 替换为目标 DNS 区域的名称。

  2. 将 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_RECORDPER_PROJECT_RECORD DNS 授权之间的区别,请参阅以下示例。这两个示例的唯一区别在于 --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"
    
  3. 运行 DNS 记录事务以保存更改:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    DNS_ZONE_NAME 替换为目标 DNS 区域的名称。

Terraform

如需将 CNAME 记录添加到您的 DNS 配置,您可以使用 google_dns_record_set 资源

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

验证证书的状态

在将证书部署到负载均衡器之前,请验证证书是否处于有效状态。证书状态可能需要几分钟才能变为 ACTIVE

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往 Certificate Manager

  2. 证书标签页上,查看证书的状态列。

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 问题排查

创建证书映射

如需将证书部署到全球外部应用负载平衡器,请创建证书映射

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

替换以下内容:

  • CERTIFICATE_MAP_NAME:证书映射的名称。

创建证书映射条目

如需将证书部署到全球外部应用负载平衡器,请创建证书映射条目。

对于要迁移的每个证书,请创建引用这些证书的证书映射条目,如下所示:

  1. 获取证书的详细信息

  2. 在日志中,为 subjectAlternativeNames 字段中列出的每个网域创建一个涵盖相应网域的证书映射条目。如果多个证书涵盖单个网域,您只需创建一个证书映射条目,并使用涵盖该网域的任何有效证书。

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME" \
        --certificates="CERTIFICATE_NAMES" \
        --hostname="HOSTNAME"
    

    替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:证书映射条目的名称。
    • CERTIFICATE_MAP_NAME:证书映射条目所附加到的证书映射的名称。
    • CERTIFICATE_NAMES:要与此证书映射条目关联的证书名称的英文逗号分隔列表。
    • HOSTNAME:您要与证书映射条目相关联的主机名。
  3. 可选:创建主证书映射条目,以引用与最初附加到代理的证书列表中的第一个证书相对应的证书。

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME" \
       --certificates="CERTIFICATE_NAMES" \
       --set-primary
    

    替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:证书映射条目的名称。
    • CERTIFICATE_MAP_NAME:证书映射条目所附加到的证书映射的名称。
    • CERTIFICATE_NAMES:要与此证书映射条目关联的证书名称的英文逗号分隔列表。
  4. 如需验证您创建的每个证书映射条目的有效状态,请运行以下命令:

     gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
         --map="CERTIFICATE_MAP_NAME"
    

    替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:证书映射条目的名称。
    • CERTIFICATE_MAP_NAME:证书映射条目所附加到的证书映射的名称。

    输出类似于以下内容:

       certificates:
       - projects/my-project/locations/global/certificates/my-certificate
       createTime: '2021-09-06T10:01:56.229472109Z'
       hostname: example.com
       name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/my-map-entry
       state: ACTIVE
       updateTime: '2021-09-06T10:01:58.277031787Z'
    

可选:在新负载均衡器上测试配置

为尽量减少停机时间,我们建议您在新负载均衡器上测试新配置的证书映射,该负载均衡器不提供生产流量。这样,您就可以在生产环境中继续进行迁移之前检测并解决任何错误。

按如下方式测试配置:

  1. 创建具有新目标代理的全球负载均衡器。如需创建负载均衡器,请参阅以下页面:

  2. 证书映射附加到新负载均衡器的目标代理。

    gcloud compute target-https-proxies create TEST_PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    替换以下内容:

    • TEST_PROXY_NAME:测试目标代理的名称。
    • CERTIFICATE_MAP_NAME:引用证书映射条目和关联证书的证书映射的名称。
  3. 对于迁移中包含的每个目标网域,请测试与新负载均衡器的 IP 地址的网域的连接:

    openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443
    

    替换以下内容:

    • DOMAIN_NAME:目标网域的名称。
    • IP_ADDRESS:新负载均衡器的 IP 地址。

    如需详细了解如何测试连接,请参阅使用 OpenSSL 进行测试

清理测试环境

清理您在之前步骤中创建的测试环境。

按照删除负载均衡器中所述删除测试负载均衡器。

请勿删除您在之前的步骤中创建的证书、证书映射或证书映射条目。

将新证书映射应用于目标负载均衡器

在测试新证书配置并确认其有效后,请按照以下步骤将新证书映射应用于目标负载均衡器(托管证书的负载均衡器)。

  1. 如果您使用的是全局负载均衡器,请将证书映射附加到新负载均衡器的目标代理

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    替换以下内容:

    • TARGET_PROXY_NAME:目标代理的名称。
    • CERTIFICATE_MAP_NAME:引用证书映射条目和关联证书的证书映射的名称。
  2. 等待配置更改应用完毕,并且负载均衡器已开始提供新证书。这通常需要几分钟的时间,但最长可能需要 30 分钟。

您的证书已迁移。如果您发现流量存在任何问题,请从目标代理中分离新的证书映射。此操作会将负载平衡器恢复为原始配置。