【问题标题】:Nginx Ingress: service "ingress-nginx-controller-admission" not foundNginx 入口:未找到服务“ingress-nginx-controller-admission”
【发布时间】:2020-08-05 11:28:58
【问题描述】:

大约一年前,我们为客户创建了一个 kubernetes 集群,其中包含两个环境;暂存和生产在命名空间中分离。我们目前正在开发该应用程序的下一个版本,并且需要一个环境来进行这项开发工作,因此我们在其自己的命名空间中创建了一个 beta 环境。

这是一个带有 MetalLB 和 nginx-ingress 的裸机 kubernetes 集群。 nginx 入口控制器与 helm 一起安装,入口是使用以下清单创建的(命名空间由我们的部署管道强制执行,并且在清单中不可见):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    #ingress.kubernetes.io/ssl-redirect: "true"
    #kubernetes.io/tls-acme: "true"
    #certmanager.k8s.io/issuer: "letsencrypt-staging"
    #certmanager.k8s.io/acme-challenge-type: http01
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "X-Robots-Tag: noindex, nofollow";
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, OPTIONS"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
spec:
  tls:
    - hosts:
        - ${API_DOMAIN}
      secretName: api-cert
  rules:
    - host: ${API_DOMAIN}
      http:
        paths:
          - backend:
              serviceName: api
              servicePort: 80

当应用清单时,kubernetes 响应以下错误:

来自服务器的错误(InternalError):创建“STDIN”时出错:发生内部错误:调用webhook“validate.nginx.ingress.kubernetes.io”失败:发布https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s:服务“ingress-nginx-controller-admission " 未找到

我尝试将入口清单的 apiVersion 更新为 networking.k8s.io/v1beta1(这是通过 helm 安装新的 nginx-ingress 控制器的 apiVersion),但我遇到了同样的错误。

我最初的怀疑是,这与当前安装和一年前安装之间的 nginx-ingress 变化有关,即使入口控制器被命名空间分隔。但是我在我的任何命名空间中都找不到任何名为 ingress-nginx-controller-admission 的服务,所以我不知道如何继续。

【问题讨论】:

    标签: kubernetes nginx-ingress


    【解决方案1】:

    我遇到了同样的问题,并从另一个 SO thread 找到了解决方案。

    我之前使用清单安装了 nginx-ingress。我删除了它创建的命名空间和clusterrole and clusterrolebinding as noted in the documentation,但这并没有删除安装在清单中的ValidatingWebhookConfiguration,但在默认情况下使用helm 时不会删除。正如上面提到的Arghya,它可以使用 helm 参数来启用。

    删除 ValidatingWebhookConfiguration 后,我的 helm 安装完美无缺。

    kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
    

    【讨论】:

    • 我的没有,它只是永远挂在那里。
    • 太棒了!救了我一天
    • 在较新的 k8s 版本上,它的“kubectl delete -A validatingwebhookconfigurations.admissionregistration.k8s.io ....”
    • 非常感谢,在从以前的安装中删除已经存在的 ValidatingWebhookConfiguration 后,新的部署很顺利:)
    【解决方案2】:

    您可以检查是否有validation webhook 和服务。如果它们不存在,请仔细检查部署并添加它们。

    kubectl get -A ValidatingWebhookConfiguration
    NAME                      CREATED AT
    ingress-nginx-admission   2020-04-22T15:01:33Z
    
    kubectl get svc -n ingress-nginx
    NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             NodePort    10.96.212.217   <none>        80:32268/TCP,443:32683/TCP   2m34s
    ingress-nginx-controller-admission   ClusterIP   10.96.151.42    <none>        443/TCP                      2m34s
    

    部署 yamls here 有 webhook 和服务。

    由于您使用 helm 安装它,您可以通过定义 here 的 helm 参数启用/禁用 webhook

    【讨论】:

    • 您好,感谢您的回复。我验证了 webhook 存在。服务 ingress-nginx-controller 存在,但在 beta 命名空间中 - 不在命名空间 ingress-nginx 中。我在 beta 命名空间中创建了 ingress-nginx-controller-admission 服务,但我得到了同样的错误。
    • 同一个集群中有多少个 nginx 入口控制器部署?
    • 三。每个环境一个
    • 我希望你已经关注了这个kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/…。否则会导致问题
    • 不,我现在在解决此问题时看到了它。我使用 helm 同时安装了两个第一个环境,它们已经完美运行了一年。这可能有关系吗?然后我可能需要更新所有环境的参数
    【解决方案3】:

    Webhook 中显示的 SSL 证书存在一些问题。

    Chaning failurePolicy: Fail to Ignore 在

    中为我工作

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/baremetal/deploy.yaml

    更多信息请查看:

    https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/

    【讨论】:

      【解决方案4】:

      我的问题被证明是 ssl 证书问题。在我删除“ValidatingWebhookConfiguration”之后, 问题解决了

      【讨论】:

        【解决方案5】:

        对我来说,问题出在 Kubernetes 1.18 版上,我升级到 1.19.1,它工作得很好。

        Pod 状态

        k get pods -n ingress-nginx
        NAME                                        READY   STATUS             RESTARTS   AGE
        ingress-nginx-admission-create-cgpj7        0/1     Completed          0          3m44s
        ingress-nginx-admission-patch-mksxs         0/1     Completed          0          3m44s
        ingress-nginx-controller-5fb6f67b9c-ps67k   0/1     CrashLoopBackOff   5          3m45s
        

        来自 pod 的错误日志

        I0916 07:15:34.317477       8 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
        F0916 07:15:34.318721       8 main.go:107] ingress-nginx requires Kubernetes v1.19.0 or higher
        
        k get po -n ingress-nginx
        NAME                                        READY   STATUS      RESTARTS   AGE
        ingress-nginx-admission-create-2tk8p        0/1     Completed   0          104s
        ingress-nginx-admission-patch-nlv5w         0/1     Completed   0          104s
        ingress-nginx-controller-79c4d49bb9-7bgcj   1/1     Running     0          105s
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-22
          • 1970-01-01
          • 1970-01-01
          • 2021-11-30
          • 2020-01-15
          • 1970-01-01
          • 2022-01-12
          • 2019-12-16
          相关资源
          最近更新 更多