Nginx Ingress:找不到 "ingress-nginx-controller-admission "服务。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx Ingress:找不到 "ingress-nginx-controller-admission "服务。相关的知识,希望对你有一定的参考价值。

大约一年前,我们为一个客户创建了一个kubernetes集群,有两个环境;暂存和生产在命名空间中分离。我们目前正在开发下一个版本的应用,需要一个环境来进行开发工作,所以我们在自己的命名空间中创建了一个测试版环境。

这是一个裸金属的kubernetes集群,使用MetalLB和和nginx-ingress。nginx ingress控制器是用 helm安装的,而 ingresses是用下面的manifest创建的(命名空间是由我们的部署管道强制执行的,在manifest中不可见)。

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 "失败。发布 https:/ingress-nginx-controller-admission.ingress-nginx.svc:443extensionsv1beta1ingresses?timeout=30s。:未找到服务 "ingress-nginx-controller-admission"。

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

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

答案

我也有同样的问题,并从另一个网站上找到了一个解决方案 SO线.

我之前用manifests安装了nginx-ingress。我删除了它创建的命名空间和 在文档中提到的 clusterrole 和 clusterrolebinding。但这并没有消除 ValidatingWebhookConfiguration 安装在清单中,但在默认情况下使用 helm 时则不需要。因为 Arghya 上文中提到,可以使用舵机参数启用。

一旦我删除了 ValidatingWebhookConfiguration我的头盔安装得很顺利。

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
另一答案

你可以检查是否有一个 验证网钩 和一个服务。如果它们不存在,请仔细检查部署并添加这些。

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 此处 有webhook和服务。

由于你已经使用了 helm 来安装它,你可以通过 helm 的参数来启用或禁用 webhook,如定义的 此处

另一答案

在webhook中,SSL证书似乎有一些问题。

Chaning failurePolicy: 失败到忽略对我来说是可行的

kubectl apply -f https:/raw.githubusercontent.comkubernetesingress-nginxcontroller-0.32.0deploystaticproviderbaremetaldeploy.yaml。

更多信息请查看。

https:/kubernetes.iodocsreferenceaccess-authn-authzextensible-admission-controllers。

以上是关于Nginx Ingress:找不到 "ingress-nginx-controller-admission "服务。的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes Nginx Ingress 找不到服务端点

在 Ingress 资源中找不到端点“default-http-backend”

nginx-ingress之server-snippet用法

Nginx 从 docker-compose 运行返回“在上游找不到主机”

统一观测丨使用 Prometheus 监控 Nginx Ingress 网关最佳实践

使用 Nginx-Ingress-Controller 在 AWS 上的 EKS 中使用 gRPC