本地部署Kubernetes Traefik访问Dashboard返回404如何配置Ingress规则
问题根因
- 服务引用错误:
dashboardService 部署在traefik命名空间,但IngressRoute中配置的服务命名空间为kube-system,Traefik找不到对应上游服务返回404 - 网络暴露不兼容:本地K8s环境默认无LoadBalancer实现,原配置中
LoadBalancer类型的lb服务无法正常对外暴露端口,流量无法进入集群 - 路由匹配缺失:IngressRoute未配置Host匹配规则,本地访问时Host头不符合隐式匹配规则也会触发404
注意:Traefik Dashboard 访问路径末尾必须带斜杠,比如
http://localhost:1080/dashboard/,直接访问/dashboard会返回404。
本地适配修改方案
1. 修正IngressRoute配置
更新IngressRoute的服务引用和路由规则:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: traefik namespace: kube-system spec: entryPoints: - https routes: - kind: Rule # 新增Host匹配,本地需在hosts文件添加127.0.0.1 traefik.local match: "Host(`traefik.local`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))" services: - kind: Service name: dashboard namespace: traefik # 修正为dashboard服务实际所在的命名空间 passHostHeader: true port: 1080 tls: {}
2. 网络暴露方案(二选一即可)
方案A:端口转发快速访问(无需修改原有配置)
直接转发Traefik的dashboard端口到本地:
kubectl port-forward -n kube-system deployment/traefik-ingress-lb 1080:1080
完成后直接访问http://localhost:1080/dashboard/即可进入控制台。
方案B:修改Service类型适配本地环境
将原LoadBalancer类型的lb服务改为NodePort类型,适配无LoadBalancer实现的本地集群:
apiVersion: v1 kind: Service metadata: name: lb namespace: kube-system spec: type: NodePort # 替换原LoadBalancer类型 externalTrafficPolicy: Local selector: k8s-app: traefik-ingress-lb ports: - name: http port: 80 targetPort: 80 nodePort: 30080 # 可选固定端口,取值范围30000-32767 - name: https port: 443 targetPort: 443 nodePort: 30443 - name: https2 port: 4443 targetPort: 4443 - name: turn port: 5349 targetPort: 5349
修改完成后在本地hosts文件添加127.0.0.1 traefik.local记录,访问https://traefik.local:30443/dashboard/即可。
3. 可选优化
本地环境无需适配AWS NLB的转发头配置,可以注释掉Deployment args中所有forwardedHeaders.insecure=true相关参数,减少不必要的配置。
内容的提问来源于stack exchange,提问作者user8094373
相关产品推荐
相关产品推荐

