Nginx Ingress:未找到服务“ingress-nginx-controller-admission”

Jør*_*gen 46 kubernetes nginx-ingress

大约一年前,我们为一个客户创建了一个 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
Run Code Online (Sandbox Code Playgroud)

应用清单时 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在我的任何命名空间中调用的任何服务,所以我不知道如何继续。

Pat*_*lla 136

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

我以前使用清单安装了 nginx-ingress。我删除了它创建的命名空间,以及文档中所述clusterrole 和 clusterrolebinding,但这不会删除ValidatingWebhookConfiguration清单中安装的 ,但在默认情况下使用 helm 时不会删除。正如Arghya上面提到的,它可以使用 helm 参数启用。

一旦我删除了ValidatingWebhookConfiguration,我的掌舵安装就完美无缺了。

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
Run Code Online (Sandbox Code Playgroud)


Arg*_*dhu 18

您可以检查是否有验证 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
Run Code Online (Sandbox Code Playgroud)

这里的部署 yaml有 webhook 和服务。

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


小智 5

Webhook 中的 SSL 证书似乎存在一些问题。

改变失败策略:忽略失败对我有用

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/