创建托管证书时出现“状态:FailedNotVisible”。

14
使用 Kubernetes 1.12.6-gke.7 或更高版本,可以创建一个 ManagedCertificate,并从 Ingress 资源引用它来将服务暴露在 Internet 上。
运行 kubectl describe managedcertificate certificate-name 命令会显示证书处于 Provisioning 状态,但最终会变成 FailedNotVisible 状态。
尽管使用了一个静态 IP 和 DNS 以正确解析到所述服务的 http 版本,但所有 ManagedCertificate 最终都处于 "Status: FailedNotVisible" 状态。
我所做的概述:
  1. 生成保留(静态)外部 IP 地址
  2. 在 CloudDNS 中配置 DNS A 记录为 subdomain.domain.com 并指向步骤 1 生成的 IP 地址。
  3. 使用 kubectl apply -f 创建名为 "subdomain-domain-certificate" 的 ManagedCertificate,其中 spec:domains 包含与步骤 2 中的 subdomain.domain.com DNS 记录对应的单个域。
  4. 创建一个简单的 Deployment 和 Service 将其暴露出去。
  5. 创建 Ingress 资源,将其引用到步骤 4 中的 service 的默认后端,以及指定步骤 1 中创建的静态 IP 和步骤 3 中生成的证书的注释。
  6. 确认 Ingress 被创建并被分配静态 IP。
  7. 访问 http://subdomain.domain.com 会提供在步骤 4 中创建的 Deployment 的 Pod 的输出。
一会儿后,运行以下命令:

kubectl describe managedcertificate subdomain-domain-certificate

结果为 "Status: FailedNotVisible"。
Name:         subdomain-domain-certificate
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  networking.gke.io/v1beta1
Kind:         ManagedCertificate
Metadata:
  Creation Timestamp:  2019-04-15T17:35:22Z
  Generation:          1
  Resource Version:    52637
  Self Link:           /apis/networking.gke.io/v1beta1/namespaces/default/managedcertificates/subdomain-domain-certificate
  UID:                 d8e5a0a4-5fa4-11e9-984e-42010a84001c
Spec:
  Domains:
    subdomain.domain.com
Status:
  Certificate Name:    mcrt-ac63730e-c271-4826-9154-c198d654f9f8
  Certificate Status:  Provisioning
  Domain Status:
    Domain:  subdomain.domain.com
    Status:  FailedNotVisible
Events:
  Type    Reason  Age   From                            Message
  ----    ------  ----  ----                            -------
  Normal  Create  56m   managed-certificate-controller  Create SslCertificate mcrt-ac63730e-c271-4826-9154-c198d654f9f8

据我所知,如果负载均衡器配置正确(在ManagedCertificate资源的后台完成),并且DNS(可以正常解析非https端点)检查通过,则证书应处于“活动”状态?

如果你是那种心急的人,你可能需要等待整整一个小时,才能使证书生效。 - Roman
6个回答

14

遇到了同样的问题,感谢这个工具。需要向Godaddy支付费用以启用DNSSEC。 - speedplane
4
不要再给 Godaddy 更多的钱了,只需将在 Godaddy 中的 DNS 名称服务器迁移到 GCP Cloud DNS 并从那里启用它即可。我不确定随时间会产生多少费用,但不需要预先付款。 - Smith
3
清楚地说,问题是必须要开启DNSSEC吗? - faridghar
1
问题具体是什么? - Luciano Fiandesio
1
注意:启用DNSSEC并不是使用ManagedCertificates的要求。但是,确保在ManagedCertificate规范中列出的所有域名都解析到使用它们的负载均衡器的全局静态IP地址是必要的。如果您启用了DNSSEC并且配置错误,可能会导致问题。 - Paul Wheeler
2
@Smith 请问问题解决了吗?我也遇到了同样的问题。我已经在Google注册了我的域名,并使用启用DNSSEC的Cloud DNS。 - Prashant

3
我的域名确实没有启用DNSSEC,但即使配置了这一点,ManagedCertificate配置仍然无法通过,我不知道是怎么回事。删除并重新应用ManagedCertificate和Ingress清单并没有奏效。但是通过执行命令gcloud beta compute ssl-certificates list,可以看到有几个未使用的托管证书挂起,通过cloud compute ssl-certificates delete NAME ...删除它们,然后重新启动配置过程,在我的情况下解决了问题。

2

2
是的,Evan,这些都是明显的(有记录的)偏差,可能会导致“FAILED_NOT_VISIBLE”问题出现。在我的情况下,原因是来自GoDaddy的DNSSEC委派不正确。 - Smith

1
我遇到了同样的错误,并发现我在错误的Kubernetes命名空间中创建了managedCertificate。一旦将managedCertificate放置在正确的命名空间中,一切都正常了。

1
通常需要多长时间才能反映?我曾经遇到过一个需要大约2个小时的情况。 - Tiago Medici

1
我刚刚在设置新服务时遇到了这个问题,我的8个外部IP地址已经用完。
按照故障排除指南,我检查了是否有将端口443转发到我的入口的规则。
结果没有。
当我试图手动设置它时,出现了一个错误告诉我我已经用尽了我的8个神奇地址。
我删除了我不需要的转发规则,问题就解决了!
现在,为什么端口80的转发规则可以成功设置到同一个入口,这超出了我的理解范围。

0

在阅读了故障排除指南之后,我仍然无法解决我的问题。当我检查GCP入口事件时,它显示入口无法找到SSL策略。请检查您在创建入口时是否遗漏了某些内容。

这是另一个参考资料,用于验证您的k8s清单以设置托管证书和入口。希望能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接