由Google管理的SSL证书停留在FAILED_NOT_VISIBLE

时间:2018-12-21 14:49:55

标签: ssl google-cloud-platform google-kubernetes-engine gke-networking

我正在尝试在GKE上配置https负载均衡器。我正在关注:https://cloud.google.com/load-balancing/docs/ssl-certificateshttps://cloud.google.com/kubernetes-engine/docs/concepts/ingress

我的配置已经使用Let's Encrypt的证书工作了一段时间。 但是,每次都需要续订证书太麻烦了,所以我想测试Google的托管服务。

到目前为止,这就是我设置的方式,但是卡在了 Ext.onReady(function () { var bigPannel = Ext.create('Ext.Panel', { title: 'Ext JS 4', width: 300, height: 200, id: 'bigPannel', renderTo: Ext.getBody() }); bigPannel.add({ title: 'panel2', width: 100, height: 100 }) }); 上。 关于如何进一步修复或调试它的任何想法?

k8s / staging / staging-ssl.yml

DATEDIFF('SECOND', DATE '1970-01-01', CURRENT_TIMESTAMP())

保留的IP

FAILED_NOT_VISIBLE

$ gcloud beta beta计算SSL证书描述了staging-google-managed-ssl

  7 apiVersion: extensions/v1beta1
  8 kind: Ingress
  9 metadata:
 10   name: my-staging-lb-ingress
 11   annotations:
 12     kubernetes.io/ingress.global-static-ip-name: "my-staging-global"
 13     ingress.gcp.kubernetes.io/pre-shared-cert: "staging-google-managed-ssl"
 14     kubernetes.io/ingress.allow-http: "false"
 15 spec:
 16   rules:
 17   - host: staging.my-app.no
 18     http:
 19       paths:
 20       - path: /*
 21         backend:
 22           serviceName: my-svc
 23           servicePort: 3001

我在文章开头链接到的文档中找到了一个部分 将SSL证书资源与目标代理相关联:

  

使用以下gcloud命令将SSL证书资源与目标代理相关联,无论SSL证书是自我管理的还是Google管理的。

$ gcloud compute addresses list
NAME                   REGION  ADDRESS         STATUS
my-staging-global              35.244.160.NNN  RESERVED


$ host staging.my-app.no 
35.244.160.NNN

当我在Ingress配置中添加此行时,这是否有必要?

creationTimestamp: '2018-12-20T04:59:39.450-08:00' id: 'NNNN' kind: compute#sslCertificate managed: domainStatus: staging.my-app.no: FAILED_NOT_VISIBLE domains: - staging.my-app.no status: PROVISIONING name: staging-google-managed-ssl selfLink: https://www.googleapis.com/compute/beta/projects/my-project/global/sslCertificates/staging-google-managed-ssl type: MANAGED

10 个答案:

答案 0 :(得分:3)

我最近遇到了这个问题。您需要检查您的 A Record 是否正确指向 Ingress 静态 IP。

如果您使用的是 Cloudflare 之类的服务,请禁用 Cloudflare 代理设置,以便 ping 域将提供 Ingress 的实际 IP。这将在 10 到 15 分钟内正确创建 Google Managed SSL 证书。

证书启动后,您可以再次启用 Cloudflare 代理设置。

答案 1 :(得分:2)

我把这个留给可能与我处于同样情况的任何人。我需要从自我管理的证书迁移到Google管理的证书。

我确实按照指南创建了由Google管理的证书,并希望在将证书应用于Kubernetes入口之前看到它已被激活(以避免停机的可能性)

docs所述

  

目标代理必须引用Google管理的证书   资源

因此,使用kubectl apply -f ingress-conf.yaml进行配置使负载均衡器使用新创建的证书,该证书不久(约15分钟)就变为活动状态

答案 2 :(得分:1)

事实证明,我错误地对生产环境进行了一些更改,并对阶段进行了其他更改。当我发现并遵循指南后,一切都按预期进行。 :-)

答案 3 :(得分:1)

除了其他答案外,从自我管理的证书迁移到Google管理的证书时,我还必须:

  • 通过kubernetes.io/ingress.allow-http: true启用http进入我的入口服务
  • 让现有的SSL证书在原始入口服务中运行,直到新的托管证书处于活动状态为止

我也有一个过期的原始SSL证书,尽管我不确定这很重要。

答案 4 :(得分:1)

在这里检查答案后对我有用(我使用负载平衡器,但 IMO 这对所有情况都是正确的):

  1. 如果过了一段时间,这个证书对你不起作用(它可能永久消失了,需要时间来证明) - 我创建了一个新的并在负载均衡器中替换了它(只需编辑它)
  2. 确保证书在创建几分钟后正在使用
  3. 确保 DNS 指向您的服务。并且您的配置在使用 http 时有效!! - 这是最好和最安全的方式(如果您刚刚移动了一个域 - 确保您在检查它时到达正确的 IP)
  4. 创建新证书后或问题已解决 - 您的域将变为绿色,但您仍需要等待(可能需要一个小时或更长时间)

答案 5 :(得分:0)

根据您提供的以下documentation,这将为您提供帮助:

  

状态为FAILED_NOT_VISIBLE表示由于DNS或负载平衡配置出现问题,导致域的证书供应失败。确保已配置DNS,以便证书的域解析为负载均衡器的IP地址。

答案 6 :(得分:0)

staging.my-app.no的A资源记录的TTL(生存时间)是多少? 使用例如

dig +nocmd +noall +answer staging.my-app.no

弄清楚。

在我的情况下,将TTL从60秒增加到7200,让domainStatus最终到达ACTIVE

答案 7 :(得分:0)

在我的情况下,我需要更改运行状况检查并将其指向适当的端点(nginx-ingress上的/ healthz),并且在healtcheck返回true之后,我必须确保在与gce-入口。完成这两件事之后,它终于通过了,否则我遇到了同样的错误。 “ FAILED_NOT_VISIBLE”

答案 8 :(得分:0)

我遇到了同样的问题。 我通过重新查看文档来修复它。

https://cloud.google.com/load-balancing/docs/ssl-certificates/troubleshooting?_ga=2.107191426.-1891616718.1598062234#domain-status

FAILED_NOT_VISIBLE  
Certificate provisioning failed for the domain. Either of the following might be the issue:
The domain's DNS record doesn't resolve to the IP address of the Google Cloud load balancer. To resolve this issue, update the DNS records to point to your load balancer's IP address.
The SSL certificate isn't attached to the load balancer's target proxy. To resolve this issue, update your load balancer configuration.
Google Cloud continues to try to provision the certificate while the managed status is PROVISIONING.

因为我的负载均衡器位于cloudflare之后。默认情况下,cloudflare已启用cdn代理,我需要在Google验证DNS后将证书状态更改为活动状态,然后首先将其禁用。

答案 9 :(得分:0)

就我而言,在工作中。我们正在大量利用托管证书,以便为开发人员和 QA 提供动态环境。因此,我们大量配置和删除托管证书。这意味着我们也在生成和删除托管证书时更新 Ingress 资源。

我们发现,即使您从此注释中删除托管证书的引用:

networking.gke.io/managed-certificates: <list>

似乎随机 Ingress 没有从 LoadBalancer 中删除关联的ssl-certificates

ingress.gcp.kubernetes.io/pre-shared-cert: <list>

因此,当托管证书被删除时。入口将以某种方式“卡住”,无法提供新的托管证书。因此,新的托管证书将在一段时间后从 PROVISIONING 状态转换为 FAILED_NOT_VISIBLE 状态

到目前为止,我们发现的唯一解决方案是,如果新证书在 30 分钟后没有得到提供。我们将检查注解 ingress.gcp.kubernetes.io/pre-shared-cert 是否包含不再存在的 ssl-certificate。

您可以使用以下命令检查现有的 ssl 证书

gcloud compute ssl-certificates list

如果碰巧一个不再存在的 ssl 证书仍在注释中徘徊。然后,我们将手动从 ingress.gcp.kubernetes.io/pre-shared-cert 注释中删除不必要的 ssl-certificate。

应用更新的配置后,在大约 5 分钟内,处于 FAILED_NOT_VISIBLE 状态的新托管证书应该会被提供并且处于 ACTIVE 状态。