Nginx 入口:找不到服务 "ingress-nginx-controller-admission"
Nginx Ingress: service "ingress-nginx-controller-admission" not found
大约一年前,我们为客户创建了一个具有两个环境的 kubernetes 集群;暂存和生产在命名空间中分开。我们目前正在开发应用程序的下一个版本,需要一个环境来进行这项开发工作,因此我们在自己的命名空间中创建了一个测试版环境。
这是一个带有 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 时出现以下错误:
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
我试图将入口清单的 apiVersion 更新为 networking.k8s.io/v1beta1
(这是通过 helm 安装的新 nginx-ingress 控制器的 apiVersion),但我遇到了同样的错误。
我最初的怀疑是,这与当前安装和一年前的安装之间的 nginx-ingress 更改有关,即使入口控制器由名称空间分隔也是如此。但是我在我的任何命名空间中都找不到任何名为 ingress-nginx-controller-admission
的服务,所以我不知道如何继续。
您可以检查是否有 validation 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
部署 yamls here 有 webhook 和服务。
因为您已经使用 helm 来安装它,所以您可以 enable/disable 通过 helm 参数定义的 webhook here
我遇到了同样的问题并从另一个找到了解决方案。
我之前使用清单安装了 nginx-ingress。我删除了它创建的命名空间,以及上面提到的 clusterrole and clusterrolebinding as noted in the documentation, but that does not remove the ValidatingWebhookConfiguration
that is installed in the manifests, but NOT when using helm by default. As Arghya,它可以使用 helm 参数启用。
删除 ValidatingWebhookConfiguration
后,我的 helm 安装就完美无缺了。
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
webhook 中的 SSL 证书似乎存在一些问题。
Chaning failurePolicy: Fail to Ignore 在
中对我有用
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/
我的问题被证明是 ssl 证书问题。在我删除“ValidatingWebhookConfiguration”之后,
问题已解决
对我来说,问题出在 Kubernetes 1.18 版上,我升级到 1.19.1 后工作正常。
广告连播状态
k get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-cgpj7 0/1 Completed 0 3m44s
ingress-nginx-admission-patch-mksxs 0/1 Completed 0 3m44s
ingress-nginx-controller-5fb6f67b9c-ps67k 0/1 CrashLoopBackOff 5 3m45s
来自 pod 的错误日志
I0916 07:15:34.317477 8 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
F0916 07:15:34.318721 8 main.go:107] ingress-nginx requires Kubernetes v1.19.0 or higher
k get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-2tk8p 0/1 Completed 0 104s
ingress-nginx-admission-patch-nlv5w 0/1 Completed 0 104s
ingress-nginx-controller-79c4d49bb9-7bgcj 1/1 Running 0 105s
大约一年前,我们为客户创建了一个具有两个环境的 kubernetes 集群;暂存和生产在命名空间中分开。我们目前正在开发应用程序的下一个版本,需要一个环境来进行这项开发工作,因此我们在自己的命名空间中创建了一个测试版环境。
这是一个带有 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 时出现以下错误:
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
我试图将入口清单的 apiVersion 更新为 networking.k8s.io/v1beta1
(这是通过 helm 安装的新 nginx-ingress 控制器的 apiVersion),但我遇到了同样的错误。
我最初的怀疑是,这与当前安装和一年前的安装之间的 nginx-ingress 更改有关,即使入口控制器由名称空间分隔也是如此。但是我在我的任何命名空间中都找不到任何名为 ingress-nginx-controller-admission
的服务,所以我不知道如何继续。
您可以检查是否有 validation 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
部署 yamls here 有 webhook 和服务。
因为您已经使用 helm 来安装它,所以您可以 enable/disable 通过 helm 参数定义的 webhook here
我遇到了同样的问题并从另一个
我之前使用清单安装了 nginx-ingress。我删除了它创建的命名空间,以及上面提到的 clusterrole and clusterrolebinding as noted in the documentation, but that does not remove the ValidatingWebhookConfiguration
that is installed in the manifests, but NOT when using helm by default. As Arghya,它可以使用 helm 参数启用。
删除 ValidatingWebhookConfiguration
后,我的 helm 安装就完美无缺了。
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
webhook 中的 SSL 证书似乎存在一些问题。
Chaning failurePolicy: Fail to Ignore 在
中对我有用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/
我的问题被证明是 ssl 证书问题。在我删除“ValidatingWebhookConfiguration”之后, 问题已解决
对我来说,问题出在 Kubernetes 1.18 版上,我升级到 1.19.1 后工作正常。
广告连播状态
k get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-cgpj7 0/1 Completed 0 3m44s
ingress-nginx-admission-patch-mksxs 0/1 Completed 0 3m44s
ingress-nginx-controller-5fb6f67b9c-ps67k 0/1 CrashLoopBackOff 5 3m45s
来自 pod 的错误日志
I0916 07:15:34.317477 8 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
F0916 07:15:34.318721 8 main.go:107] ingress-nginx requires Kubernetes v1.19.0 or higher
k get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-2tk8p 0/1 Completed 0 104s
ingress-nginx-admission-patch-nlv5w 0/1 Completed 0 104s
ingress-nginx-controller-79c4d49bb9-7bgcj 1/1 Running 0 105s