使用代管式传输层安全协议 (TLS) 证书和 HTTPS

本页面介绍了如何关闭和重新启用代管式 TLS 证书功能,该功能可自动提供和续订 TLS 证书以支持 HTTPS 连接。它仅适用于 Cloud Run for Anthos on Google Cloud。

如果您想使用 HTTPS,

  • 您的容器应持续侦听 $PORT
  • 您必须选择提供 TLS 证书的方式:

  • 如果您使用的是代管式证书,还必须映射自定义网域才能使用代管式证书功能。

使用 HTTPS 和 HTTP

默认情况下,如果您使用代管式证书,则具有代管式证书的集群或 Cloud Run 服务将对 HTTP 和 HTTPS 流量公开。如果您只需要 HTTPS 流量,可以启用 HTTPS 重定向,以强制所有流量仅使用 HTTPS。

问题排查

如果您在使用代管式 TLS 证书时遇到问题,请参阅代管式 TLS 问题排查页面。

限制

使用代管式 TLS 证书功能时,需要注意以下事项:

  • 对于 Google Cloud 上的 GKE 专用集群,代管式 TLS 证书已停用并且不受支持。
  • 要使用代管式证书功能,您的服务必须向外部公开:该服务不能是集群本地服务或 Virtual Private Cloud 公开的服务。
  • 代管式证书功能仅适用于您为 Cloud Run 设置集群时自动安装的 Istio:它不适用于 Istio 插件或其他 Istio 配置。如果您需要使用 Istio 插件,则可能需要使用您自己的 TLS 证书
  • 此功能使用 Let's Encrypt,其初始配额限制为每个已注册网域每周 50 个 TLS 证书。您可以按照 Let's Encrypt 文档申请增加配额。
  • 在其他平台(例如本地或 AWS)上运行 Cloud Run 集群时,此功能会停用。如需使用此功能,您必须确保集群能够访问 Let's Encrypt,并且您的 Istio 入站流量服务(gke-system 下的 istio-ingress 服务)对公共互联网公开。
  • 如果您使用的是代管证书,则在您映射网域时,不能使用与要映射到的服务网址完全相同的网域映射名称。例如,如果您的服务网址为 test.default.example.com,则不能将 DomainMapping 名称设置为 test.default.example.com

准备工作

本页面中的说明假定:

支持的集群版本

对于 1.17.7-gke.15 和更新版本,系统已为 Google Cloud 上的公共集群默认启用代管式证书。

对于以下集群版本,系统已默认停用代管式证书功能,但如果您想使用代管式证书,可以启用代管式证书

  • 1.16.0
  • 1.15.7-gke.23
  • 1.14.10-gke.17
  • 1.14.9-gke.23
  • 1.14.8-gke.33

如需确定当前的集群版本,请执行以下操作:

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Enginee

  2. 点击该集群以打开其详情页面。

  3. 找到标签主版本旁边的集群版本。

停用整个集群的代管式 TLS 证书和 HTTPS

通过更新 ConfigMap config-domainmapping 来停用集群的代管式 TLS:

kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Disabled"}}'

停用特定网域映射的代管式 TLS 和 HTTPS

如果需要,您可以为特定网域映射关闭代管式 TLS:

  1. 添加注释 domains.cloudrun.com/disableAutoTLS: "true"

    kubectl annotate domainmappings DOMAIN domains.cloudrun.com/disableAutoTLS=true
  2. 验证 HTTPS 是否无效:

    curl https://DOMAIN

  3. 验证 HTTP 是否正在用于服务:

    gcloud run domain-mappings describe --domain=DOMAIN

    DOMAIN 替换为您自己的域名,例如 host example.com

    请检查上述命令返回的 url: 字段:网址应为 http,而非 https

重新启用代管式 TLS 证书和 HTTPS

要重新启用代管式 TLS,请执行以下操作:

  1. 按照网域映射页面上的说明,为您的服务创建网域映射并相应更新 DNS 记录(如果您尚未执行这些操作)。

  2. 通过更新 ConfigMap config-domainmapping 来启用代管式 TLS 证书和 HTTPS:

    kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Enabled"}}'
  3. 命令成功执行后等待几分钟,然后确保证书功能正常运行:

    kubectl get kcert

    如果证书已准备就绪,您应该会看到类似于以下内容的消息:

    NAME              READY   REASON
    example.com       True

    Kcert 可能需要 20 秒到 2 分钟才能准备就绪。如果您遇到任何问题,请参阅此功能的问题排查说明

验证成功

  1. 运行以下命令,验证 DNS 记录是否已生效:

    gcloud run domain-mappings describe --domain=DOMAIN

    DOMAIN 替换为您自己的域名,例如 host example.com

  2. 请检查上述命令返回的 url: 字段:网址应为 https,而非 http

  3. 在上述命令的运行结果中,检查 resourceRecords:rrdata 下列出的 IP 地址,并将其与您在执行 host DOMAIN 命令时看到的值进行比较。二者应该相同。

为 Cloud Run for Anthos on Google Cloud 启用 HTTPS 重定向

如果您使用代管式 TLS 证书功能,则由于向后兼容性原因,集群默认向 HTTP 和 HTTPS 流量公开。如果您想强制所有流量仅使用 HTTPS,可以通过调用以下命令为现有网域映射启用 HTTPS 重定向:

kubectl annotate domainmappings DOMAIN domains.cloudrun.com/httpsRedirect=Enabled

其中,DOMAIN 是网域映射的名称。

后续步骤

  • 参阅代管式 TLS 问题排查,详细了解如何检查网域映射、证书配额、订单状态和订单超时以及授权失败。
  • 参阅自带 TLS 证书,了解如何使用您自己的 TLS 证书而非代管式 TLS 证书。