在Kubernetes 1.22部署traefik:v2.0报错找不到ingresses.extensions资源
问题原因
Kubernetes v1.22版本正式移除了已废弃的extensions/v1beta1、networking.k8s.io/v1beta1版本Ingress资源接口,仅保留networking.k8s.io/v1版本的Ingress API。
Traefik v2.0版本未适配高版本Kubernetes的Ingress API变更,默认会优先请求extensions/v1beta1组的Ingress资源接口,且无自动降级到新版API的逻辑,因此在v1.22+版本集群中会抛出资源找不到的报错。
Traefik v2.4及以上版本完成了对Kubernetes v1.22+版本的Ingress v1 API适配,默认优先请求新版API,因此v2.5版本不存在该问题。
适配解决方案
方案一:升级Traefik版本(推荐)
直接将部署使用的镜像替换为traefik:v2.4及以上的稳定版本,无需额外修改配置即可原生兼容Kubernetes v1.22+集群的Ingress规则。
方案二:保留Traefik v2.0版本的适配调整
如果因业务依赖必须使用v2.0版本,可按以下步骤调整配置:
- 修改Traefik启动参数,强制指定使用新版Ingress API,在启动命令中添加如下参数:
--providers.kubernetesingress.ingressapi=networking.k8s.io/v1 - 调整Traefik对应的RBAC角色权限,确保ServiceAccount对新版Ingress资源有足够操作权限,角色规则中需新增如下配置:
- apiGroups: ["networking.k8s.io"] resources: ["ingresses", "ingressclasses"] verbs: ["get", "list", "watch"]
- 检查集群内所有Ingress资源的API版本,确认全部使用
apiVersion: networking.k8s.io/v1,删除所有旧API版本的Ingress资源。
内容的提问来源于stack exchange,提问作者d3vpasha
相关产品推荐
相关产品推荐

