如果您想使用 HTTPS,
- 您的容器应持续侦听 $PORT
- 您必须选择提供 TLS 证书的方式: - 使用代管式 TLS 证书,其中 TLS 证书会根据需要自动创建,并且会自动续订。本页面介绍支持的 Google Kubernetes Engine 版本提供的此功能。
- 使用您自己的证书,您将负责获取和续订证书。在某些情况下,如限制中所述,您必须使用自己的证书。
 
- 如果您使用的是代管式证书,还必须映射自定义网域才能使用代管式证书功能。 
使用 HTTPS 和 HTTP
默认情况下,如果您使用托管式证书,则具有托管式证书的集群或 Knative serving 服务将对 HTTP 和 HTTPS 流量公开。如果您只需要 HTTPS 流量,可以启用 HTTPS 重定向,以强制所有流量仅使用 HTTPS。
问题排查
如果您在使用代管式 TLS 证书时遇到问题,请参阅代管式 TLS 问题排查页面。
限制
使用代管式 TLS 证书功能时,需要注意以下事项:
- 对于 Google Cloud上的 Knative serving 专用集群,托管式 TLS 证书已停用并且不受支持。
- 要使用代管式证书功能,您的服务必须向外部公开:该服务不能是集群本地服务或 Virtual Private Cloud 公开的服务。
- 托管式证书功能仅适用于 Cloud Service Mesh。不支持 Istio 插件或其他 Istio 配置。
- 此功能使用 Let's Encrypt,其初始配额限制为每个已注册网域每周 50 个 TLS 证书。您可以按照 Let's Encrypt 文档申请增加配额。
- 在其他平台(例如本地或 AWS)上运行 Knative serving 集群时,此功能会停用。如需使用此功能,您必须确保集群能够访问 Let's Encrypt,并且您的 Cloud Service Mesh 入站流量服务向公共互联网公开。
准备工作
本页面中的说明假定:
- 您已将 Knative serving 服务部署到集群。
- 您拥有一个网域。如果您没有网域,可以从 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:
- 添加注释 - domains.cloudrun.com/disableAutoTLS: "true":- kubectl annotate domainmappings DOMAIN domains.cloudrun.com/disableAutoTLS=true 
- 验证 HTTPS 是否无效: - curl https://DOMAIN
- 验证 HTTP 是否正在用于服务: - gcloud run domain-mappings describe --domain DOMAIN - 将 DOMAIN 替换为您自己的域名,例如 - your-domain.com- 请检查上述命令返回的 - url:字段:网址应为- http,而非- https。
重新启用代管式 TLS 证书和 HTTPS
要重新启用代管式 TLS,请执行以下操作:
- 按照网域映射页面上的说明,为您的服务创建网域映射并相应更新 DNS 记录(如果您尚未执行这些操作)。 
- 通过更新 ConfigMap - config-domainmapping来启用代管式 TLS 证书和 HTTPS:- kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Enabled"}}' 
- 命令成功执行后等待几分钟,然后确保证书功能正常运行: - kubectl get kcert - 如果证书已准备就绪,您应该会看到类似于以下内容的消息: - NAME READY REASON your-domain.com True - Kcert可能需要 20 秒到 2 分钟才能准备就绪。如果您遇到任何问题,请参阅此功能的问题排查说明。
验证成功
- 运行以下命令,验证 DNS 记录是否已生效: - gcloud run domain-mappings describe --domain DOMAIN - 将 DOMAIN 替换为您自己的域名,例如 - your-domain.com
- 请检查上述命令返回的 - url:字段:网址应为- https,而非- http。
- 在上述命令的运行结果中,检查 - resourceRecords:rrdata下列出的 IP 地址,并将其与您在执行- host DOMAIN命令时看到的值进行比较。二者应该相同。
为 Knative serving 启用 HTTPS 重定向
如果您使用代管式 TLS 证书功能,则由于向后兼容性原因,集群默认向 HTTP 和 HTTPS 流量公开。如果您想强制所有流量仅使用 HTTPS,可以通过调用以下命令为现有网域映射启用 HTTPS 重定向:
kubectl annotate domainmappings DOMAIN domains.cloudrun.com/httpsRedirect=Enabled
其中,DOMAIN 是网域映射的名称。
相关主题
- 参阅代管式 TLS 问题排查,详细了解如何检查网域映射、证书配额、订单状态和订单超时以及授权失败。
- 参阅自带 TLS 证书,了解如何使用您自己的 TLS 证书而非代管式 TLS 证书。