K8s部署kubeFate 1.3.0报extensions/v1beta1 Ingress不存在如何解决
问题根因
Kubernetes 1.22及以上版本已彻底移除extensions/v1beta1版本的Ingress API,仅保留networking.k8s.io/v1版本Ingress资源接口。
你手动修改kubefate.yaml里的静态Ingress配置段,仅能解决apply阶段静态资源提交的报错。执行资源查询命令时重复出现相同的旧API报错,核心原因是KubeFate v1.3.0的控制器程序内部硬编码了调用extensions/v1beta1接口查询、调和Ingress资源的逻辑,控制器启动后会持续向APIServer发起旧版API请求,触发资源不存在报错,和你修改的静态部署yaml没有关系。
解决方法
- 匹配版本兼容(零改造成本)
KubeFate v1.3.0官方适配的Kubernetes版本范围为1.15~1.21,直接将集群版本降级到1.21.x系列,无需修改任何配置,原版部署文件即可正常运行,不会出现API版本不兼容问题。 - 手动修改控制器适配高版本K8s
如果不能降级集群,可按以下步骤调整:- 拉取KubeFate v1.3.0源码,全局检索所有Ingress API调用逻辑,将所有指定
extensions/v1beta1的组版本参数替换为networking.k8s.io/v1 - 同步调整代码中Ingress资源的结构体定义,匹配v1版本Ingress的必填规则(比如你之前配置的
pathType、ingressClassName字段,在控制器创建、更新Ingress的逻辑中也要对应传入,避免资源调和失败) - 重新编译控制器二进制,打包为自定义容器镜像,替换
kubefate.yaml中默认的控制器镜像地址后重新部署即可。
- 拉取KubeFate v1.3.0源码,全局检索所有Ingress API调用逻辑,将所有指定
- 升级KubeFate版本
直接升级到v1.4.0及以上版本的KubeFate,官方已经在高版本中完成了新版Ingress API的适配,无需手动修改配置,直接使用官方提供的部署文件即可在1.22+版本K8s集群上正常运行。
问题定位验证方法
如果需要确认报错来源,可执行以下操作验证:
- 执行
kubectl logs -n kube-fate $(kubectl get pod -n kube-fate -l app=kubefate -o name)查看控制器运行日志,能看到持续打印调用旧版Ingress API失败的记录 - 执行
kubectl scale deploy kubefate -n kube-fate --replicas=0将控制器副本数缩为0,再执行kubectl get all,ingress -n kube-fate,如果不再出现旧API报错,即可确认报错来自控制器内部的硬编码逻辑。
内容的提问来源于stack exchange,提问作者CKJ
相关产品推荐
相关产品推荐

