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
我创建了以下 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