如何通过Kubernetes原生Ingress暴露Traefik v2 Dashboard
方案可行性说明
完全可行,不需要特殊适配。你之前用IngressRoute直接引用api@internal是Traefik自定义资源的专属用法,原生Kubernetes Ingress不需要直接调用这个内置服务,Traefik开启Dashboard/API后会自动暴露对应Kubernetes Service,直接指向该Service即可实现完全一致的效果。
配置步骤
1. 前置确认
先确认两个基础条件:
- Traefik启动参数包含
--api.dashboard=true(v2/v3版本通用),确保Dashboard和API能力已开启 - 执行命令查看Traefik所在命名空间下的自带Service:
# 替换为你实际部署Traefik的命名空间,常见为traefik、kube-system kubectl get svc -n traefik
正常能看到名为traefik的Service,暴露的端口对应Traefik的API/Dashboard监听端口(默认是8080,部分部署版本为9000,以实际查询结果为准),这个Service已经自动把流量路由到内置的api@internal服务,不需要你额外创建。
2. 编写原生Ingress配置
和你之前的IngressRoute逻辑完全对齐,需要同时匹配/api和/dashboard两个路径前缀,通过Traefik的Ingress注解挂载你之前用的中间件、配置证书解析器即可,参考配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: traefik-dashboard namespace: my-namespace annotations: # 指定使用Traefik作为Ingress控制器 kubernetes.io/ingress.class: traefik # 挂载你之前创建的两个中间件,格式为<中间件命名空间>-<中间件名>@kubernetescrd,多个用逗号分隔 traefik.ingress.kubernetes.io/router.middlewares: my-namespace-traefik-dashboard-https-redirect@kubernetescrd,my-namespace-traefik-dashboard-basic-auth@kubernetescrd # 配置Let's Encrypt证书解析器,和你之前certResolver: le的配置对应 traefik.ingress.kubernetes.io/router.tls.certresolver: le spec: tls: - hosts: - traefik.example.com rules: - host: traefik.example.com http: paths: # 匹配Dashboard路径 - path: /dashboard pathType: Prefix backend: service: # 替换为你实际查到的Traefik自带Service名、端口和所在命名空间 name: traefik port: number: 8080 # 匹配Dashboard依赖的API路径,漏配会导致页面加载失败 - path: /api pathType: Prefix backend: service: name: traefik port: number: 8080
注意事项
- 访问Dashboard时建议带末尾斜杠:
https://traefik.example.com/dashboard/,避免Traefik的路径跳转异常 - 如果你部署Traefik时关闭了默认Service自动创建,手动新建一个Selector匹配Traefik Pod标签的Service,端口指向Traefik的API监听端口即可,效果和自带Service完全一致
- 中间件如果和Ingress不在同一个命名空间,注解里的命名空间要替换成中间件实际所在的命名空间,否则会报中间件找不到的错误
内容的提问来源于stack exchange,提问作者zingi
相关产品推荐
相关产品推荐

