当我的 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”入口类,并且我的入口 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
附注我知道事后看来这似乎非常明显,因为解决方案实际上就在错误日志中,但是能够通过谷歌搜索这个错误可以节省我一些时间。
首先,有两个不同的 nginx 入口控制器。 一个是由 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 暴露给家庭本地网络了。
对于那些从 Kubernetes 安装 Helm Chart 的人来说,这是安装时的关键配置:
--set controller.ingressClassResource.default=true
这与
NGINX文档中找到的 (
controller.ingressClass.setAsDefaultIngress
) 不同。
完整命令:
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--set controller.ingressClassResource.default=true \
--namespace ingress-nginx --create-namespace
“名为 nginx 的 IngressClass 具有无效的 Spec.Controller k8s.io/ingress-nginx”
即使点击此链接后仍出现上述错误- https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/common/ingress-class.yaml