如果您想使用 HTTPS,
- 您的容器应持续侦听
$PORT
您必须选择提供 TLS 证书的方式:
- 使用代管式 TLS 证书,其中 TLS 证书会根据需要自动创建,并且会自动续订。本页面介绍支持的 Google Kubernetes Engine 版本提供的此功能。
- 使用您自己的证书,您将负责获取和续订证书。在某些情况下,如限制中所述,您必须使用自己的证书。
如果您使用的是代管式证书,还必须映射自定义网域才能使用代管式证书功能。
使用 HTTPS 和 HTTP
默认情况下,如果您使用代管式证书,则具有代管式证书的集群或 Cloud Run for Anthos 服务将对 HTTP 和 HTTPS 流量公开。如果您只需要 HTTPS 流量,可以启用 HTTPS 重定向,以强制所有流量仅使用 HTTPS。
问题排查
如果您在使用代管式 TLS 证书时遇到问题,请参阅代管式 TLS 问题排查页面。
限制
使用代管式 TLS 证书功能时,需要注意以下事项:
- 对于 Google Cloud 上的 Cloud Run for Anthos 专用集群,代管式 TLS 证书已停用并且不受支持。
- 要使用代管式证书功能,您的服务必须向外部公开:该服务不能是集群本地服务或 Virtual Private Cloud 公开的服务。
- 代管式证书功能仅适用于您在为 Cloud Run for Anthos 设置集群时自动安装的 Istio,而不适用于 Istio 插件或其他 Istio 配置。如果您需要使用 Istio 插件,则可能需要使用您自己的 TLS 证书。
- 此功能使用 Let's Encrypt,其初始配额限制为每个已注册网域每周 50 个 TLS 证书。您可以按照 Let's Encrypt 文档申请增加配额。
- 在其他平台(例如本地或 AWS)上运行 Cloud Run for Anthos 集群时,此功能会停用。如需使用此功能,您必须确保集群能够访问 Let's Encrypt,并且您的 Istio 入站流量服务(
gke-system
下的istio-ingress
服务)对公共互联网公开。 - 如果您使用的是代管证书,则在您映射网域时,不能使用与要映射到的服务网址完全相同的网域映射名称。例如,如果您的服务网址为
test.default.example.com
,则不能将 DomainMapping 名称设置为test.default.example.com
。
准备工作
本页面中的说明假定:
- 您的 Cloud Run for Anthos 集群使用支持代管式 TLS 的集群版本之一。
- 您已将 Cloud Run for Anthos 服务部署到集群。
- 您拥有一个网域。如果您没有网域,可以从 Google 或其他网域供应商获取一个。
- 您为自己的服务创建了网域映射,并按照网域映射页面上的说明更新了您的 DNS 记录。
- 如果您是通过 Google Domains 获得的网域,请将其用作 DNS 服务器。否则,请使用 Cloud DNS 或您选择的 DNS 服务器。使用 Google Domains 中的网域是最简单的选择。
支持的集群版本
对于 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
如需确定当前的集群版本,请执行以下操作:
访问 Google Cloud 控制台中的 Google Kubernetes Engine 页面:
点击该集群以打开其详情页面。
找到标签主版本旁边的集群版本。
停用整个集群的代管式 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 替换为您自己的域名,例如
example.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 example.com True
Kcert
可能需要 20 秒到 2 分钟才能准备就绪。如果您遇到任何问题,请参阅此功能的问题排查说明。
验证成功
运行以下命令,验证 DNS 记录是否已生效:
gcloud run domain-mappings describe --domain DOMAIN
将 DOMAIN 替换为您自己的域名,例如
example.com
请检查上述命令返回的
url:
字段:网址应为https
,而非http
。在上述命令的运行结果中,检查
resourceRecords:rrdata
下列出的 IP 地址,并将其与您在执行host DOMAIN
命令时看到的值进行比较。二者应该相同。
为 Cloud Run for Anthos 启用 HTTPS 重定向
如果您使用代管式 TLS 证书功能,则由于向后兼容性原因,集群默认向 HTTP 和 HTTPS 流量公开。如果您想强制所有流量仅使用 HTTPS,可以通过调用以下命令为现有网域映射启用 HTTPS 重定向:
kubectl annotate domainmappings DOMAIN domains.cloudrun.com/httpsRedirect=Enabled
其中,DOMAIN 是网域映射的名称。
相关主题
- 参阅代管式 TLS 问题排查,详细了解如何检查网域映射、证书配额、订单状态和订单超时以及授权失败。
- 参阅自带 TLS 证书,了解如何使用您自己的 TLS 证书而非代管式 TLS 证书。