如果您想使用 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 证书。