Kubernetes 1.22使用ingressClassName配置ingress-nginx返回404如何解决
问题根因
Kubernetes 1.18+版本引入ingressClassName字段后,需要集群中存在对应的IngressClass资源,ingress-nginx控制器才会匹配处理绑定该类的Ingress规则。你当前Kubespray部署的ingress-nginx只配置了控制器的class名称,没有自动创建对应的IngressClass资源,导致控制器识别不到指定ingressClassName: nginx的Ingress,所以不会为其分配地址、转发流量,返回404。
解决步骤
步骤1:确认IngressClass缺失
执行以下命令验证集群中是否存在对应的IngressClass:
kubectl get ingressclasses.networking.k8s.io
如果输出中没有名为nginx的资源,即可确认是该问题。
步骤2:创建IngressClass资源
两种方式可选:
方式1:手动创建
新建ingress-class.yaml文件,内容如下:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: nginx # 可选:如果要设为集群默认IngressClass,添加以下注解 # annotations: # ingressclass.kubernetes.io/is-default-class: "true" spec: controller: k8s.io/ingress-nginx
执行创建:
kubectl apply -f ingress-class.yaml
方式2:修改Kubespray配置自动创建
在你的inventory/mycluster/group_vars/k8s_cluster/addons.yml中添加以下配置:
ingress_nginx_ingress_class_enabled: true
重新运行Kubespray的addons部署阶段即可自动生成IngressClass资源。
步骤3:验证生效
创建完成后等待1~2分钟,重新查看Ingress状态:
kubectl get ing grafana
此时ADDRESS字段会正常分配控制器地址,访问grafana.mycluster.org即可正常转发。
内容的提问来源于stack exchange,提问作者bayman
相关产品推荐
相关产品推荐

