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

本页面介绍了如何停用和重新启用代管式 TLS 证书功能,该功能可自动提供和续订 TLS 证书,以支持 Knative 服务中的 HTTPS 连接。

如果您想使用 HTTPS,

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

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

使用 HTTPS 和 HTTP

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

问题排查

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

限制

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

  • Knative 服务在 Google Cloud 上提供专用集群会停用代管式 TLS 证书,并且不支持该证书。
  • 要使用代管式证书功能,您的服务必须向外部公开:该服务不能是集群本地服务或 Virtual Private Cloud 公开的服务。
  • 代管式证书功能仅适用于 Anthos Service Mesh。不支持 Istio 插件或其他 Istio 配置。
  • 此功能使用 Let's Encrypt,其初始配额限制为每个已注册网域每周 50 个 TLS 证书。您可以按照 Let's Encrypt 文档申请增加配额。
  • 在其他平台(例如本地或 AWS)上运行 Knative 服务集群时,此功能会处于停用状态。如需使用此功能,您必须确保集群能够访问 Let's Encrypt,并且您的 Anthos Service Mesh 入站流量服务向公共互联网公开。

准备工作

本页面中的说明假定:

  • 您已将 Knative 服务服务部署到集群。
  • 您拥有一个网域。如果您没有网域,可以从 Google 或其他网域供应商获取一个。
  • 您为自己的服务创建了网域映射,并按照网域映射页面上的说明更新了您的 DNS 记录。
  • 使用 Cloud DNS 或您选择的 DNS 服务器。

停用整个集群的代管式 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 替换为您自己的域名,例如 your-domain.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
    your-domain.com              True

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

验证成功

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

    gcloud run domain-mappings describe --domain DOMAIN

    DOMAIN 替换为您自己的域名,例如 your-domain.com

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

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

为 Knative 服务启用 HTTPS 重定向

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

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

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

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