AKS升级至v1.23.5后Traefik请求v1beta1.Ingress致TLS错误排查
问题根因
该问题和业务侧使用v1版本Ingress模板无关,核心原因是当前部署的Traefik版本过低,不兼容Kubernetes v1.22+版本的Ingress API变更:
- 你使用的Traefik镜像版本为2.4.8,该版本内置的Kubernetes client-go版本为v0.20.2,默认会同时监听
extensions/v1beta1、networking.k8s.io/v1beta1、networking.k8s.io/v1三个版本的Ingress资源做版本适配。 - Kubernetes v1.22版本正式移除了前两个旧版Ingress API,Traefik 2.4.8尝试拉取已下线的v1beta1 Ingress资源时,就会抛出你看到的资源不存在报错。
- 该API监听失败会直接导致Traefik Ingress控制器无法正常同步集群内的Ingress规则,你配置的TLS证书关联规则也不会被加载,因此Traefik只能为所有请求返回默认证书,触发TLS握手失败。
另外你当前的TLSOption配置存在生效范围问题:Traefik默认只会读取自身所在命名空间(你环境中为traefik命名空间)下名为default的TLSOption作为全局默认TLS配置,放在default命名空间的TLSOption不会被全局引用,这是TLS配置不生效的次要原因。
修复方案
按优先级依次操作即可:
- 升级Traefik到兼容K8s v1.22+的版本
最低要求升级到Traefik v2.5+版本,推荐直接升级到2.x系列稳定版(如v2.10.x),这类版本的client-go已经适配K8s v1.22+的API变更,不会再尝试拉取已移除的v1beta1 Ingress资源。
修改Terraform的helm_release配置,显式指定兼容的Traefik镜像版本:
注意你当前使用的Traefik Helm Chart版本为9.19.1,默认对应Traefik v2.4.x,建议同时升级Chart版本到和Traefik v2.10.x匹配的版本,避免配置参数不兼容。set { name = "image.tag" value = "v2.10.7" } - 修正TLSOption部署位置
把当前在default命名空间下名为default的TLSOption,移动到Traefik所在的traefik命名空间,Traefik启动时才会自动加载这个全局默认TLS配置。如果需要给特定Ingress自定义TLS选项,可在对应业务命名空间创建TLSOption,通过Ingress注解引用即可。 - 修正HTTP跳HTTPS的配置参数
你当前启动参数中的重定向配置存在冗余错误:--entrypoints.web.http.redirections.entrypoint.to=:443为无效配置,正确的重定向参数仅需保留以下内容,删掉多余配置避免重定向逻辑异常:--entrypoints.web.http.redirections.entrypoint.to=websecure --entrypoints.web.http.redirections.entrypoint.scheme=https --entrypoints.web.http.redirections.entrypoint.permanent=true - 验证修复结果
升级完成后查看Traefik运行日志,确认不存在v1beta1 Ingress的监听报错,再请求业务域名验证证书是否正常返回、TLS握手成功即可。
内容的提问来源于stack exchange,提问作者DaveVentura
相关产品推荐
相关产品推荐

