kubernetes ingress-nginx:名称为 nginx 的 IngressClass 对 ingress-nginx 无效

kubernetes ingress-nginx: IngressClass with name nginx is not valid for ingress-nginx

我创建了以下 ingressClass,而我的 ingress-nginx 控制器已经 运行:

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”入口 class,我的入口 nginx 控制器会按预期处理它们。

但是,在重新启动 ingress-nginx-controller pod 后,我在其日志中收到以下错误并保留:

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/ingress-nginx 按照错误日志中的指示。

对于其他控制器,如 nginx ingress(与 ingress-nginx 不同),这应该是 nginx。org/ingress-controller 按照此处的指示:https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/common/ingress-class.yaml

p.s。我知道这在事后看来真的很明显,因为解决方案实际上在错误日志中,但是能够 google 这个错误会让我很累一些时间。

首先,有两个不同的nginx ingress controller。 一个由 google/kubernetes 维护者开发,称为 ingress-nginx。 另一个由 Nginx 团队提供,名为 nginx-ingress。 这些控制器是完全不同和独立的。 你说的那个好像是google的那个 https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal

我尝试按照相同的文档在裸机上安装它,但默认情况下出现完全相同的错误。看起来清单 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 有一个无效的 Spec.Controller k8s。io/ingress-nginx”

即使遵循此 link- 仍出现上述错误 https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/common/ingress-class.yaml