Kubernetes Traefik Ingress配置mTLS客户端认证不生效问题
问题成因
该问题由两处配置错误共同导致,且两类错误均属于Traefik静默失效类配置,不会触发启动报错或Kubernetes资源事件告警:
- 注解键名不合法:Traefik 2.x 版本中,Kubernetes Ingress引用路由TLS选项的合法注解键为
traefik.ingress.kubernetes.io/router.tls.options,当前配置中斜杠后缺失了router.层级,写为了traefik.ingress.kubernetes.io/tls.options,Traefik会直接忽略这个无法识别的无效注解。 - 跨提供者引用缺失后缀标识:自定义的
mtlsTLS选项是通过文件提供者加载的动态配置,并非Kubernetes集群内的TLSOption CRD资源。Traefik规则要求跨提供者引用动态配置时,必须在资源名后追加@<提供者类型>后缀;裸写mtls时,Traefik会默认在Kubernetes提供者的资源范围内查找同名TLSOption,查找失败后自动回退到全局默认的空TLS配置(即未开启客户端证书校验的default选项),因此不会触发mTLS校验。
之前将TLS选项命名为default时可全局生效,是因为default是Traefik预留的全局默认TLS配置名,无论在哪个提供者中定义,都会被自动加载为全量路由的默认TLS参数,不需要显式引用。
解决方法
按以下步骤修正配置即可:
- 编辑需要开启mTLS的Ingress资源,删除原有错误的TLS选项注解,替换为正确键名的注解
- 给注解值补充文件提供者后缀
@file,修正后的注解配置示例如下:
annotations: traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls: "true" traefik.ingress.kubernetes.io/router.tls.options: mtls@file
- 应用更新后的Ingress配置,无需重启Traefik Pod,等待3-5秒配置同步完成后即可验证:未携带合法客户端证书的请求会被直接拒绝,仅携带信任CA签发的客户端证书的请求可正常访问后端服务。
内容的提问来源于stack exchange,提问作者rskntroot
相关产品推荐
相关产品推荐

