作者:MeshCloud脉时云公有云架构师王明立
引言
使用第三方域名想要申请谷歌泛域名托管证书,不更改原来的解析,用于LB的前端访问HTTPS,防止更改解析导致的业务异常。
目标
- 使用证书管理器创建由具有 DNS 授权的公开信任的 CA 颁发的 Google 管理的证书。
- 使用目标 HTTPS 代理将证书部署到经典外部 HTTP(S) 负载平衡器。
准备工作
- 证书管理器所有者
- Cloud DNS 管理员(如果使用 Cloud DNS 作为您的 DNS 解决方案)
- 计算负载平衡器管理员
实施步骤
创建 DNS 授权
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME
--domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
替换以下内容:
- AUTHORIZATION_NAME是描述此 DNS 授权的唯一名称。
- DOMAIN_NAME是您为其创建此 DNS 授权的域的名称。
此命令返回您必须添加到 DNS 配置中的CNAME 记录。如下
createTime: '2023-03-08T02:10:33.066116203Z'
dnsResourceRecord:
data: 2d66b255-227c-4bf0-8b91-d9317be35dfa.11.authorize.certificatemanager.goog.
name: _acme-challenge.spoton.cn.
type: CNAME
domain: spoton.cn
name: projects/spoton-project/locations/global/dnsAuthorizations/mingli-test
updateTime: '2023-03-08T02:10:33.646127672Z'
将 CNAME 记录添加到您的 DNS 配置
_acme-challenge.spoton.cn. CNAME 2d66b255-227c-4bf0-8b91-d9317be35dfa.11.authorize.certificatemanager.goog.
创建引用 DNS 授权的 Google 管理的证书
gcloud certificate-manager certificates create CERTIFICATE_NAME
--domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
替换以下内容:
- CERTIFICATE_NAME是描述此证书的唯一名称。
- DOMAIN_NAME是此证书的目标域,泛域名例如*.spoton.cn
- AUTHORIZATION_NAME是您为此证书创建的 DNS 授权的名称。
验证证书是否有效
gcloud certificate-manager certificates describe CERTIFICATE_NAME
替换CERTIFICATE_NAME为上一步创建的目标 Google 管理的证书的名称
验证成功后如下(颁发证书过程需要十几分钟)
createTime: '2023-03-08T02:37:47.885415265Z'
expireTime: '2023-06-06T02:37:50Z'
managed:
authorizationAttemptInfo:
- domain: '*.spoton.cn'
state: AUTHORIZED
dnsAuthorizations:
- projects/884786875960/locations/global/dnsAuthorizations/mingli-test
domains:
- '*.spoton.cn'
state: ACTIVE
name: projects/spoton-project/locations/global/certificates/spoton-ssl-20230308
pemCertificate: |
-----BEGIN CERTIFICATE-----
MIIFWjCCBEKgAwIBAgIRAPAjD4yNDY/CCSrXSW/hZcQwDQYJKoZIhvcNAQELBQAw
RjELMAkGA1UEBhMCVVMxIjAgBgNVBAoTGUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBM
TEMxEzARBgNVBAMTCkdUUyBDQSAxRDQwHhcNMjMwMzA4MDE1MzAxWhcNMjMwNjA2
******
9U5pCZEt4Wi4wStz6dTZ/CLANx8LZh1J7QJVj2fhMtfTJr9w4z30Z209fOU0iOMy
+qduBmpvvYuR7hZL6Dupszfnw0Skfths18dG9ZKb59UhvmaSGZRVbNQpsg3BZlvi
d0lIKO2d1xozclOzgjXPYovJJIultzkMu34qQb9Sz/yilrbCgj8=
-----END CERTIFICATE-----
sanDnsnames:
- '*.spoton.cn'
updateTime: '2023-03-08T02:37:48.360016576Z'
将证书部署到负载均衡器
创建证书映射
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
CERTIFICATE_MAP_NAME为目标证书映射的名称。
创建证书映射条目
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是要与此证书映射条目关联的主机名。
验证证书映射条目是否处于活动状态
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME
--map="CERTIFICATE_MAP_NAME"
替换以下内容:
- CERTIFICATE_MAP_ENTRY_NAME是目标证书映射条目的名称。
- CERTIFICATE_MAP_NAME是此证书映射条目附加到的证书映射的名称。
该gcloud工具返回类似于以下内容的输出:
certificates:
- projects/884786875960/locations/global/certificates/spoton-ssl-20230308
createTime: '2023-03-08T02:59:32.240578543Z'
hostname: '*.spoton.cn'
name: projects/spoton-project/locations/global/certificateMaps/ssl-mingli-map/certificateMapEntries/ssl-mingli-map-spoton
state: ACTIVE
updateTime: '2023-03-08T02:59:32.649359127Z'
将证书映射附加到目标代理
- 在 Google Cloud 控制台中,转到目标代理页面。
- 记下目标代理的名称,复制下对应LB的https的代理名称。
- 将证书映射附加到目标代理:
gcloud compute target-https-proxies update PROXY_NAME
--certificate-map="CERTIFICATE_MAP_NAME"
替换以下内容:
- PROXY_NAME是目标代理的名称。
- CERTIFICATE_MAP_NAME是引用您的证书映射条目及其关联证书的证书映射的名称。
如果有任何现有的 TLS (SSL) 证书直接附加到代理,则代理优先考虑证书映射引用的证书,而不是直接附加的 TLS (SSL) 证书。至此所有步骤已完成,等待几分钟测试HTTPS即可生效。
常见问题
Certificate Manager 的资源配额?
配额 | 默认限制 | 描述 |
Google 管理的证书 | 100 | Cloud 项目中由 Google 管理的证书总数 |
自我管理证书 | 100 | Cloud 项目中的自我管理证书总数 |
区域自管证书 | 5个 | Cloud 项目中每个区域的区域自我管理证书总数 |
证书映射 | 100 | Cloud 项目中的证书映射总数 |
证书映射条目 | 1000 | Cloud 项目中的证书映射条目总数 |
DNS授权 | 1000 | Cloud 项目中的 DNS 授权总数 |
证书颁发配置 | 100 | Cloud 项目中的证书颁发配置总数 |