我是这个主题的新手。我们正在使用 GCP(App Engine,标准)来托管一个 nodejs 应用程序。但是,出于不同的原因,我们决定创建两项服务 -阶段和默认(想象一下并行运行的同一个应用程序)。
默认一个已连接到自定义域(GAE 提供的 SSL 证书)并且运行正常。阶段可以通过 google 生成的 URL(stage-dot-example.appspot.com)访问服务,并且显然受到 ssl 证书的保护。
然后,我们必须通过合作伙伴的安全审查,并使用阶段为了这。
结果是我们必须禁用 TLSv1.0 和 TLSv1.1。使用 GAE - 我们需要创建负载均衡器并将 SSL 策略切换到特定于 TLS 的策略。
问题:要创建外部 HTTPS 负载均衡器 - 您必须创建 SSL 证书资源(即您必须拥有自己的域)。使用自定义域,我想这应该不难,但我该如何做到这一点阶段?我是否使用我的阶段SSL 证书资源中的域名(...appspot.com)?如果是的话 - 我该如何处理 DNS 记录和外部 IP(您需要在 A 和 AAAA 记录中将 IP 切换为外部 IP)?
或者如果我做错了什么-你能给我指出正确的方向吗?
更新+更新2
我决定采用 Wojtek_B 建议的路径。因此我验证了 stage.example.com,发现它无需负载均衡器即可正常运行。
此时,我的 DNS 记录包括来自 @ 的 4 个 A 记录和 4 个 AAAA 记录,其中 IP 由 google 提供,以及 3 个指向“ghs.googlehosted.com”的 CNAME 记录(www、stage、www.stage)。
接下来,我创建了包含 4 个域名的 SSL 证书资源:example.com、www.example.com,stage.example.com,www.stage.example.com。
然后我添加了一个外部 HTTPS 负载均衡器(具有外部 IP,例如 1.2.3.4 和上面提到的 SSL 证书)。
我为 @、www、stage 和 www.stage 添加了新的 A 记录以指向 1.2.3.4。我已删除 CNAME 记录,因为它们太多了。
等待 2-3 小时后(TTL 为 1/2 小时),除 example.com(卡在 FAILED_NOT_VISIBLE)之外,所有子域均已激活。
回答
我一直在与托管 SSL 证书卡在配置状态的问题作斗争。我关注了本教程您应该只创建外部 IP(v4)。但我还有 4 条 AAAA 记录(在域验证期间获得),其中(显然)是 ipv6。因此,我尝试保留外部 IP(v6),不到一分钟就将所有 4 个(子)域推送到活动状态。
只需几分钟,这两项服务就通过 LB 启动并运行,并具有所需的 TLS 配置。
答案1
您只能在 GCP 中使用指向负载均衡器的域的 SSL 证书。如果您尝试为应用引擎应用程序配置证书,则不会生成该证书。
发生这种情况的原因如下:
- 域名的 DNS 记录无法解析为 Google Cloud 负载均衡器的 IP 地址。要解决此问题,请更新 DNS 记录以指向您的负载均衡器的 IP 地址。
- SSL 证书未附加到负载均衡器的目标代理。要解决此问题,请更新负载均衡器配置。
- 全局转发规则的前端端口不包括 SSL 代理负载均衡器的端口 443。可以通过添加包含端口 443 的新转发规则来解决此问题。
但是,您可以使用的所有应用引擎地址(带有 *.appspot.com 子域)都具有有效的 SSL 证书。但您无法使用负载均衡器。
如果您可以在没有负载均衡器的情况下运行所有暂存测试,那么 GCP 的 SSL 证书将完成这项工作。
如果您需要让您的临时环境在与生产环境相同的设置下运行,那么您需要创建一个新的 LB,其 backedn 指向您的 GAE 服务。此外,您还需要另一个域(或至少是子域)。您需要使用除 之外的域,*.appspot.com
因为创建 GCP 的自管理 SSL 证书时,您需要提供指向 LB 本身(而不是 GAE)的域。
对于您的情况,我建议创建一个新的子域。然后为该子域创建新的 LB 并生成新的 SSL 证书。配置证书最多需要 60 分钟。您还必须更改A
子域中的记录以指向新创建的 LB - 只有这样才能成功配置 SSL 证书(因为域必须指向 LB)。
或者您可以将子域名添加到现有证书的域名列表中。保留为域创建的所有记录,并在创建子域后创建一组新的A
(和AAAA
必要的记录)。
如果您使用 GCP 的 Cloud DNS,那么它将看起来像这样:
另外,我建议您阅读链接的文档,以更好地了解整个过程。