kubernetes Nginx入口:服务“ingress-nginx-controller-admission”未找到

xkftehaa  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(6)|浏览(372)

bounty还有7天到期。回答此问题可获得+250声望奖励。Evan Carroll想要奖励现有答案

我们大约在一年前为一个客户创建了一个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

当应用manifest时,kubernetes会返回以下错误:
来自服务器的错误(InternalError):创建“STDIN”时出错:发生内部错误:调用webhook“validate.nginx.ingress.kubernetes.io“失败:Post https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s:服务“ingress-nginx-controller-admission”未找到
我尝试将ingress清单的apiVersion更新为networking.k8s.io/v1beta1(这是通过helm安装的新nginx-ingress控制器的apiVersion),但我得到了相同的错误。
我最初的怀疑是,这与当前安装和一年前安装之间的nginx-ingress变化有关,即使ingress控制器是由命名空间分隔的。但是我在我的任何命名空间中都找不到任何名为ingress-nginx-controller-admission的服务,所以我不知道如何继续。

rsl1atfo

rsl1atfo1#

我遇到了同样的问题,并从另一个SO thread找到了解决方案。
我之前已经使用清单安装了nginx-ingress。我删除了它创建的命名空间,以及文档中提到的clusterrole和clusterrolebinding,但这并没有删除清单中安装的ValidatingWebhookConfiguration,但默认情况下使用helm时不会。正如上面提到的Arghya,它可以使用helm参数启用。
一旦我删除了ValidatingWebhookConfiguration,我的 Helm 安装就完美无瑕了。

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
jrcvhitl

jrcvhitl2#

您可以检查是否有验证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和service。
因为你已经使用helm来安装它,你可以通过helm参数来启用/禁用webhook,定义如下:here

pokxtpni

pokxtpni4#

我的问题被证明是SSL证书问题。删除“ValidatingWebhookConfiguration”后,问题解决

klsxnrf1

klsxnrf15#

对我来说,问题是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
6ss1mwsb

6ss1mwsb6#

我在Kubernetes集群上工作时遇到了这个问题。
当我在测试Kubernetes集群中将资源从一个节点池迁移到另一个节点池时出现了这个问题。
我忘了我还没有把Nginx ingressCert Manager从我想退役的noodpool中迁移出来。因此,在将其他应用程序从我想停用的noodpool中迁移出来后,我删除了noodpool,从而从Kubernetes集群中删除了Nginx ingressCert Manager
我所要做的就是将Nginx ingressCert Manager重新部署到新的noodpool中。

相关问题