Traefik2.7配置IngressRoute访问K8s Dashboard报404问题咨询
故障根因
该问题由两处配置错误共同触发,两类错误均属于正常HTTP请求响应流程范畴,不会在Traefik或Dashboard日志中打印错误记录,排查时容易被忽略:
- 未显式指定后端服务通信协议:Traefik默认以HTTP明文协议向后端Service端口发起请求,当前配置对接的是Kubernetes Dashboard的443 HTTPS监听端口,明文HTTP请求发送到HTTPS端口时,Dashboard无法正确解析请求内容,直接返回404状态码。
- ServersTransport的
serverName配置错误:该字段值是Traefik与后端服务做TLS握手时携带的SNI标识,当前配置填写的是公网访问域名k8sdash.kub.techlabnews.com,但Kubernetes Dashboard自带的自签TLS证书仅包含集群内服务域名,即使开启insecureSkipVerify: true跳过证书合法性校验,Dashboard本身仍会校验请求SNI与自身服务标识的匹配性,不匹配时直接返回404响应。
修复方案
调整两处配置即可恢复正常:
- 在IngressRoute的后端服务配置中显式声明通信协议为HTTPS,同时开启原始Host头传递,避免后续触发Dashboard的CSRF校验拦截
- 将ServersTransport的
serverName修改为Kubernetes Dashboard的集群内服务域名,匹配后端自签证书的SNI规则
修正后的完整配置如下:
apiVersion: traefik.containo.us/v1alpha1 kind: ServersTransport metadata: name: kubernetes-dashboard-transport namespace: kubernetes-dashboard spec: # 修改为Dashboard集群内服务域名,匹配后端自签证书SNI serverName: "kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local" insecureSkipVerify: true --- apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: kubernetes-dashboard namespace: kubernetes-dashboard spec: entryPoints: - websecure routes: - kind: Rule match: Host(`k8sdash.kub.techlabnews.com`) services: - kind: Service port: 443 name: kubernetes-dashboard namespace: kubernetes-dashboard # 显式声明后端使用HTTPS协议通信 scheme: https # 传递原始请求Host头,避免CSRF校验拦截 passHostHeader: true serversTransport: kubernetes-dashboard-transport tls: secretName: kub.techlabnews-com-cert-secret-replica
操作验证
- 执行
kubectl apply -f <修正后配置文件路径>应用配置 - 等待10秒左右待Traefik同步配置规则,清理浏览器缓存后重新访问Dashboard地址即可正常加载页面。
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

