大约一年前,我们为客户创建了一个具有两个环境的 Kubernetes 集群;预备环境和生产环境在命名空间中分开。我们目前正在开发应用程序的下一个版本,并需要一个用于此开发工作的环境,因此我们在其自己的命名空间中创建了 beta 环境。
这是一个裸机 Kubernetes 集群,使用了 MetalLB 和 nginx-ingress。nginx ingress 控制器是使用 helm 安装的,而 ingresses 是使用以下清单创建的(命名空间由我们的部署管道强制执行,不在清单中可见):
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 响应以下错误:
Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s: service "ingress-nginx-controller-admission" not found
我尝试将 ingress 的 apiVersion 更新为 networking.k8s.io/v1beta1
(这是新的 nginx-ingress 控制器通过 helm 安装的 apiVersion),但我仍然遇到相同的错误。
我最初怀疑这与当前安装和一年前的安装之间的 nginx-ingress 更改有关,即使 ingress 控制器被分隔成不同的命名空间。但我在任何命名空间中都找不到名为 ingress-nginx-controller-admission
的服务,因此我不知道该如何继续。
kubectl delete job -n ingress-nginx ingress-nginx-admission-create ingress-nginx-admission-patch
- Yeahia Md Abid