Nginx Ingress 控制器 - 获取 IngressClass nginx 时出错

Ste*_*eve 5 nginx kubernetes kubernetes-ingress nginx-ingress

v1.22.1在裸机 CentOS 中设置了一个 Kubernetes 集群。我在按照此链接设置 Nginx Ingress 控制器时遇到问题。

我按照步骤 1-3 进行了完全相同的操作,但CrashLoopBackOff在 nginx 入口控制器 pod 中出现错误。我检查了 pod 的日志,发现如下:

[root@dev1 deployments]# kubectl logs -n nginx-ingress nginx-ingress-5cd5c7549d-hw6l7
I0910 23:15:20.729196       1 main.go:271] Starting NGINX Ingress controller Version=1.12.1 GitCommit=6f72db6030daa9afd567fd7faf9d5fffac9c7c8f Date=2021-09-08T13:39:53Z PlusFlag=false
W0910 23:15:20.770569       1 main.go:310] The '-use-ingress-class-only' flag will be deprecated and has no effect on versions of kubernetes >= 1.18.0. Processing ONLY resources that have the 'ingressClassName' field in Ingress equal to the class.
F0910 23:15:20.774788       1 main.go:314] Error when getting IngressClass nginx: the server could not find the requested resource
Run Code Online (Sandbox Code Playgroud)

我相信我的 IngressClass 设置正确,如下所示:

[root@dev1 deployments]# kubectl get IngressClass
NAME    CONTROLLER                     PARAMETERS   AGE
nginx   nginx.org/ingress-controller   <none>       2m12s
Run Code Online (Sandbox Code Playgroud)

所以我不知道为什么在获取 IngressClass nginx 时显示错误。有人能给我一些灯光吗?

moo*_*tte 2

繁殖和发生的情况

我在 CentOS 7 上创建了一个单节点集群。kubeadm并得到了同样的错误。

你和我之所以能够继续下去,只是因为我们一开始就错过了这个命令:

git checkout v1.12.1
Run Code Online (Sandbox Code Playgroud)

主要区别ingress-class.yaml在于networking.k8s.io/v1beta1inv1.12.1networking.k8s.io/v1inmaster分支。

当我第二次去这里并切换分支后,我立即看到了这个错误:

$ kubectl apply -f common/ingress-class.yaml
error: unable to recognize "common/ingress-class.yaml": no matches for kind "IngressClass" in version "networking.k8s.io/v1beta1"
Run Code Online (Sandbox Code Playgroud)

看起来其他资源尚未更新以在 Kubernetes 上使用v1.22+

参阅已弃用的迁移指南 - v1.22 - ingress

如何进一步进行

  • 我在集群上测试了完全相同的方法v1.21.4,它的效果非常好。所以你可以考虑降级集群。

  • 如果您不太习惯使用 NGINX 入口控制器(支持Nginx inc,可以尝试使用ingress nginx开发的 NGINX 入口控制器kubernetes community。我在 上测试过v1.22,效果很好。请参见 裸机集群上的安装

PS 这可能会令人困惑,但是有两个免费的 nginx 入口控制器,它们是由不同的团队开发的。还有第三个选项 - NGINX Plus,它是付费的并且有更多选项。请看这里的区别

  • 嗨@moonkotte,谢谢!这提醒我,由于networking.k8s.io/v1beta1,我在开始设置入口类时确实遇到了错误。所以我手动将 apiversion 更改为networking.k8s.io/v1。让我试试你提供的 Ingress Nginx。谢谢! (2认同)