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


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

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

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

目标

本教程介绍如何完成以下任务:

  • 确定要从目标负载均衡器迁移的证书。
  • 创建 Google 管理的证书。
  • 创建证书映射和证书映射条目。
  • 在其他负载均衡器中测试证书映射。
  • 将证书映射附加到目标负载均衡器。

准备工作

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  7. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  13. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  14. 所需的角色

    请确保您拥有以下角色,以便完成本教程中的任务:

    • 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 解决方案,则必须添加此角色。

    详情请参阅以下内容:

    确定要迁移的证书

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

    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 授权,请使用 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 行,然后获取要添加到 DNS 配置中的 CNAME 记录(datanametype)。

    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 区域的名称。

      请参阅以下示例:

      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"
      
    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 分钟。

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

    后续步骤