【发布时间】: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 的服务,所以我不知道如何继续。
【问题讨论】: