当我的ingress nginx控制器已经运行时,我创建了以下ingressClass:
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: example.com/ingress-nginx-controller
一切都很好,新创造的女主角被分配了";nginx";ingress类,我的ingress nginx控制器按预期处理它们。
然而,在重新启动ingress nginx控制器吊舱时,我在其日志中收到以下错误&它保持:
I1206 05:23:22.968400 8 main.go:115] "Enabling new Ingress features available since Kubernetes v1.18"
E1206 05:23:22.971801 8 main.go:134] Invalid IngressClass (Spec.Controller) value "quivr.be/ingress-nginx-controller". Should be "k8s.io/ingress-nginx"
F1206 05:23:22.971832 8 main.go:135] IngressClass with name nginx is not valid for ingress-nginx (invalid Spec.Controller)
发生此错误是因为IngressClass资源的spec.controller字段不能只包含任何域名。域名&控制器名称特定于您部署的入口控制器。
对于ingress nginx控制器,这需要是错误日志中指示的k8s.io/inginger nginx。
对于其他控制器,如nginx ingress(与ingress nginx不同(,应为nginx.org/ingress-controller,如下所示:https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/common/ingress-class.yaml
p.s.事后看来,我知道这似乎很明显,因为解决方案确实在错误日志中,但能够在谷歌上搜索这个错误会为我节省一些时间。
首先,有两个不同的nginx入口控制器。其中一个是由google/kubernetes维护人员开发的,名为ingress nginx。另一个由Nginx团队提供,名为nginxingress。这些控制器是完全不同的并且是分开的。你所说的似乎是谷歌的https://kubernetes.github.io/ingress-nginx/deploy/#bare-金属
我试图按照相同的文档将其安装在裸金属上,但默认情况下得到了完全相同的错误。看起来manifest deploy.yaml已经过时,或者与最新的kubernetes v1.20.2(?(不兼容
然后我尝试了Nginx团队提供的https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/并在最新的kubernetes上成功部署,没有出现任何问题。说明书足够详细。它还支持自定义tcp/udp端口的入口AFAIK,有两种方式可以定义自定义TCP/UDP端口,我使用了这种方式:https://docs.nginx.com/nginx-ingress-controller/configuration/transportserver-resource/现在我已经将mysql暴露在家庭本地网络中。
"名为nginx的IngressClass具有无效的规范控制器k8s.io/ingress nginx";
即使在遵循此链接后也会出现上述错误-https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/common/ingress-class.yaml