大约一年前,我们为客户创建了具有两个环境的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
(这是通过舵安装新的nginx-ingress控制器的apiVersion),但是我遇到了同样的错误。
我最初的怀疑是,这与当前安装和一年前的安装之间的nginx-ingress更改有关,即使入口控制器由名称空间分隔也是如此。但是我找不到ingress-nginx-controller-admission
在我的任何命名空间中调用的任何服务,因此我不知道如何进行。
我遇到了同样的问题,并从另一个SO线程找到了解决方案。
我以前使用清单安装了nginx-ingress。我删除了它创建的名称空间,以及文档中提到的clusterrole和clusterrolebinding,但这并没有删除ValidatingWebhookConfiguration
清单中安装的,但是默认情况下使用helm时不会删除。如上文Arghya所述,可以使用helm参数启用它。
一旦删除ValidatingWebhookConfiguration
,我的头盔安装就完美无缺了。
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句