升级Traefik后K8s Ingress Controller功能失效求助
核心原因
你在启动参数中指定了--providers.kubernetesingress.ingressclass=traefik-internal,这会让Traefik 2.9.x只识别以下两类Ingress对象:
- 带有
kubernetes.io/ingress.class: traefik-internal注解的Ingress - 关联了名为
traefik-internal的IngressClass资源的Ingress
而你的原有Ingress使用的是kubernetes.io/ingress.class: traefik注解,和Traefik当前配置的Ingress类不匹配,所以无法被识别。
解决方案
方案1:修改原有Ingress的注解
把所有目标Ingress的kubernetes.io/ingress.class注解值改为traefik-internal,和Traefik配置的类名一致。
方案2:调整Traefik的启动参数
修改安装命令,将--providers.kubernetesingress.ingressclass的值改为traefik,匹配你原有Ingress的注解:
helm upgrade --install traefik --set dashboard.enabled=true --set rbac.enabled=true --set="service.externalIPs={1.2.3.4}" --set="additionalArguments={--api=true,--log.level=INFO,--providers.kubernetesingress.ingressclass=traefik,--serversTransport.insecureSkipVerify=true}" traefik/traefik
方案3:使用Helm Chart自带的IngressClass配置(推荐)
Traefik官方Helm Chart提供了更规范的IngressClass配置参数,替代在additionalArguments中硬编码:
helm upgrade --install traefik \ --set dashboard.enabled=true \ --set rbac.enabled=true \ --set "service.externalIPs={1.2.3.4}" \ --set ingressClass.name=traefik \ --set ingressClass.enabled=true \ --set "additionalArguments={--api=true,--log.level=INFO,--serversTransport.insecureSkipVerify=true}" \ traefik/traefik
这个配置会自动创建名为traefik的IngressClass资源,同时让Traefik识别关联该类的Ingress,以及带有kubernetes.io/ingress.class: traefik注解的Ingress(兼容旧方式)。
补充说明
Traefik 2.x版本开始逐步推进IngressClass资源的使用,取代传统的注解方式,但仍保留对注解的兼容——前提是Traefik配置的Ingress类名和注解值一致。你之前的旧版本Traefik可能没有严格限制Ingress类的匹配,或者你当时的启动参数和现在不同,导致升级后出现匹配问题。
内容的提问来源于stack exchange,提问作者soapergem

