我已经按照
上的说明做了https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs
设置一个新的SSL证书给我们。
证书:
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: mydomain.se-certificate
spec:
domains:
- sub.mydomain.se
入口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: myip-se
networking.gke.io/managed-certificates: mydomain.se-certificate
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.allow-http: "true"
spec:
rules:
- host: sub.mydomain.se
http:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: my-service
port:
number: 8080
- DNS a记录指向全局静态IP,通过nslookup验证一百万次
- "my-service"已启动并运行,运行状况检查成功
- 我试过各种设置命令,把所有东西都撕掉了很多次,等了很长时间。
- dns名称在https://dnssec-analyzer.verisignlabs.com/ 上都是绿色的
主机名总是失败,FAILED_NOT_VISIBLE
我之前已经成功地使用了这个设置,并且自从我从LetsEncrypt证书转移到google证书的几年以来,我一直在使用这个运行应用程序。这些仍然运行良好,非常类似的设置,尽管在beta apiVersions。但检查它们看起来是一样的。我唯一想到的是,后台应用程序可能有什么东西是罪魁祸首。
后台应用是一个服务,不能在http上使用,只能在https上使用。根据需要,在http上提供一个"/healthz"端点,但其他任何内容都将转到早期的https重定向。
所以我想知道供应细节是什么。我在文档中找到了这个:
如果您正在使用注释network .gke。Io/managed-certificates不能使用kubernetes.io/ingress注释。允许http:假的。您可以更新Ingress并添加注释kubernetes.io/Ingress。
外部HTTP(S)负载均衡器编程完成后,allow-http: false
我有不是不允许http,但我在服务部署中为除了健康检查路径之外的所有内容做https重定向。因此,我认为供应可能需要实际节点端口上的2xx响应,并且由于3xx而失败。会是这样吗?
如果是这样的话,那就太离谱了,但我还是抓住了救命稻草。
如果不知道您的GCP项目或VPC上还有什么,可能会有几种情况下google管理的证书将无法提供。我将分享在我的情况下有效的修复,并且可能也适用于您。
如果您的DNS记录恰好包含AAAA记录(IPv6),那么您还必须在负载均衡器上包含该地址与相同的您想要提供的google管理证书
从我对这个问题的经验来看,这个项目碰巧有一个遗留的负载均衡器配置了域名的IPv6地址,这是由别人设置的,我一直忽略了,因为我只使用IPv4地址。摆脱了另一个负载均衡器,并将IPv6地址添加到我的新负载均衡器中,解决了配置谷歌管理证书的问题。
Google现在有一些关于这个场景的具体文档。该文档页面昨天更新了(可能是对我两天前提交的GCP支持票据的响应),在此之前,唯一的线索是在SSL故障排除页面上很难找到描述FAILED_NOT_VISIBLE的句子。