本地Kubernetes部署Nginx Ingress时CLASS显示<none>问题求助
问题产生原因
networking.k8s.io/v1版本的Ingress资源从Kubernetes 1.18版本开始,正式废弃了通过kubernetes.io/ingress.class注解指定关联控制器的方式,改为通过spec.ingressClassName字段声明绑定的Ingress类。kubectl get ingress命令输出的CLASS列,只会读取spec.ingressClassName字段的值,你当前的Ingress配置只在注解里写了类声明,没有配置对应spec字段,因此CLASS列显示为none。- 额外注意:M1芯片版Docker Desktop内置的K8s集群默认不携带Nginx Ingress控制器,若未提前安装适配ARM64架构的ingress-nginx控制器,即使配置正确类名,路由规则也无法正常生效。
修复方法
- 先确认集群已安装Nginx Ingress控制器:执行
kubectl get ingressclass,如果返回结果中没有名为nginx的IngressClass资源,先安装适配ARM64架构的ingress-nginx控制器,安装完成后确认存在名为nginx的IngressClass。 - 修改Ingress资源定义文件,删除废弃的类注解,新增
spec.ingressClassName字段,修改后的完整配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-resource annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: ingressClassName: nginx rules: - http: paths: - path: /hello pathType: Prefix backend: service: name: hello-app port: number: 8080
- 执行
kubectl apply -f <你的Ingress配置文件名>.yaml应用更新,重新执行kubectl get ingress即可看到CLASS字段正常显示为nginx,等待控制器同步规则后就可以通过http://localhost/hello访问对应服务。
内容的提问来源于stack exchange,提问作者Kory
相关产品推荐
相关产品推荐

