【问题标题】:cert-manager-webhook: FailedDiscoveryCheck, namespace hangs in terminationcert-manager-webhook:FailedDiscoveryCheck,命名空间在终止时挂起
【发布时间】:2020-05-07 18:20:06
【问题描述】:

我删除了一个命名空间,该命名空间具有通过 nginx-ingress 公开的服务,并带有由 cert-manager 控制的 Let's Encrypt 证书。命名空间的删除以终止状态挂起。

这可能是内部 API 的问题,如 here 所述。当我跑步时:

kubectl api-resources

它返回 certmanager webhook API 不可访问:

错误:无法检索服务器 API 的完整列表:webhook.certmanager.k8s.io/v1beta1:服务器当前无法处理请求

当我运行kubectl get apiservices v1beta1.webhook.certmanager.k8s.io -o yaml,检查它的状态时:

...
service:
    name: cert-manager-webhook
    namespace: nginx-ingress
    port: 443
version: v1beta1
versionPriority: 15
status:
conditions:
- lastTransitionTime: "2020-01-21T15:02:23Z"
    message: 'failing or missing response from https://10.24.32.6:10250/apis/webhook.certmanager.k8s.io/v1beta1:
    bad status from https://10.24.32.6:10250/apis/webhook.certmanager.k8s.io/v1beta1:
    404'
    reason: FailedDiscoveryCheck
    status: "False"
    type: Available

所有 nginx-ingress 和 cert-manager pod 都处于良好状态。我在部署和删除此命名空间时对 certmanager 进行了更新,这可能是对问题的解释。这个问题怎么解决?

版本:

【问题讨论】:

    标签: kubernetes nginx-ingress cert-manager


    【解决方案1】:

    here 提供了一个简单的解决方案来解决该问题。但这并没有说明此类问题是如何出现或如何预防的。

    创建一个描述终止命名空间的临时 JSON 文件:

    kubectl get namespace <terminating-namespace> -o json >tmp.json
    

    通过从finalizers 字段中删除kubernetes 值来编辑文件tmp.json 并保存文件。

    设置一个临时代理IP和端口:

    kubectl proxy
    

    在新的终端窗口中,使用您的临时代理 IP 和端口进行 API 调用:

     curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize
    

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 2021-04-16
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2020-09-26
      相关资源
      最近更新 更多