本教程介绍了如何使用 Certificate Manager 部署自行管理的全球证书。
以下负载平衡器支持全球自行管理的证书:
- 全球外部应用负载均衡器
- 传统应用负载均衡器
- 全球外部代理网络负载均衡器
- 传统代理网络负载均衡器
如果您想部署到区域级负载平衡器或跨区域负载平衡器,请参阅以下内容:
目标
本教程介绍如何完成以下任务:
- 将自行管理的证书上传到 Certificate Manager。
- 使用目标 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
所需的角色
请确保您拥有以下角色,才能完成本教程中的任务:
Certificate Manager Owner (
roles/certificatemanager.owner
)创建和管理 Certificate Manager 资源所必需。
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin
) 或 Compute Network Admin (roles/compute.networkAdmin
)必须拥有此角色才能创建和管理 HTTPS 目标代理。
详情请参阅以下内容:
- 证书管理器的角色和权限。
- Compute Engine 的 Compute Engine IAM 角色和权限。
创建负载均衡器
本教程假定您已创建并配置了负载平衡器的后端、健康检查、后端服务和网址映射。如果您创建了外部应用负载平衡器,请记下网址映射的名称,因为您需要在本教程稍后的内容中使用该名称。
如果您尚未创建负载平衡器,请参阅以下页面进行创建:
如需创建全球外部应用负载均衡器,请参阅设置具有虚拟机实例组后端的全球外部应用负载均衡器。
如需创建传统版应用负载平衡器,请参阅设置具有代管式实例组后端的传统版应用负载平衡器。
如需创建全球外部代理网络负载平衡器(SSL 代理),请参阅设置具有虚拟机实例组后端的全球外部代理网络负载平衡器(SSL 代理)。
如需创建传统代理网络负载平衡器(SSL 代理),请参阅设置具有虚拟机实例组后端的传统代理网络负载平衡器(SSL 代理)。
创建私钥和证书
如需创建私钥和证书,请执行以下操作:
使用受信任的第三方证书授权机构 (CA) 颁发证书及其关联的密钥。
验证证书是否已正确链接且是否受根信任。
准备以下 PEM 编码文件:
- 证书文件 (CRT)
- 相应的私钥文件 (KEY)
如需了解如何请求和验证证书,请参阅创建私钥和证书。
将自行管理的证书上传到 Certificate Manager
如需将证书上传到 Certificate Manager,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往证书管理器页面。
在证书标签页上,点击添加证书。
在证书名称字段中,为证书输入一个唯一名称。
可选:在说明字段中,输入证书的说明。您可以通过说明来识别证书。
在位置部分,选择全球。
在范围部分,选择默认。
在证书类型部分,选择创建自行管理的证书。
对于证书字段,请执行以下任一操作:
- 点击上传按钮,然后选择您的 PEM 格式的证书文件。
- 复制并粘贴 PEM 格式证书的内容。内容必须以
-----BEGIN CERTIFICATE-----
开头,并以-----END CERTIFICATE-----
结尾。
对于私钥证书字段,请执行以下任一操作:
- 点击上传按钮,然后选择您的私钥。您的私钥必须采用 PEM 格式,且不受密码保护。
- 复制并粘贴 PEM 格式的私钥内容。私钥必须以
-----BEGIN PRIVATE KEY-----
开头,并以-----END PRIVATE KEY-----
结尾。
在标签字段中,指定要与证书关联的标签。如需添加标签,请点击
添加标签,然后为标签指定键和值。点击创建。
新证书会显示在证书列表中。
gcloud
如需创建全球自行管理的证书,请使用 certificate-manager certificates create
命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --certificate-file="CERTIFICATE_FILE" \ --private-key-file="PRIVATE_KEY_FILE"
替换以下内容:
CERTIFICATE_NAME
:证书的名称。CERTIFICATE_FILE
:CRT 证书文件的路径和文件名。PRIVATE_KEY_FILE
:KEY 私钥文件的路径和文件名。
Terraform
如需上传自行管理的证书,您可以将 google_certificate_manager_certificate
资源与 self_managed
块搭配使用。
API
向 certificates.create
方法发出 POST
请求,以上传证书,如下所示:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME { self_managed: { pem_certificate: "PEM_CERTIFICATE", pem_private_key: "PEM_KEY", } }
替换以下内容:
PROJECT_ID
:Google Cloud 项目的 ID。CERTIFICATE_NAME
:证书的名称。PEM_CERTIFICATE
:证书 PEM。PEM_KEY
:密钥 PEM。
将自行管理的证书部署到负载平衡器
如需部署自行管理的全球证书,请使用证书映射。
创建证书映射
创建一个证书映射,引用与您的证书关联的证书映射条目:
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
:您要与证书映射条目关联的主机名。如果您要创建使用通配符域名的证书,请也使用通配符指定主机名,例如
*.example.com
。
Terraform
如需创建证书映射条目,您可以使用 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) 证书。
清理
为避免系统因本教程中使用的资源而向您的 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
替换为证书映射的名称。删除已上传的证书:
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME
替换为证书的名称。